首页 > 其他分享 >三次握手,四次挥手,以及Socket、TCP、HTTP之间的区别

三次握手,四次挥手,以及Socket、TCP、HTTP之间的区别

时间:2024-07-01 19:29:10浏览次数:17  
标签:HTTP Socket seq IP TCP 连接 客户端

网络开发

1.网站:最全的socket,tcp,http三者之间的区别和原理_cocket与tcpip-CSDN博客

1.网络七层

1.定义:网络七层(简称:OSI),即开放式系统互连。该体系架构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层)

2.socket,tcp,http三者之间的区别和原理1.应用层:*HTTP*、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、 Whois、ENRP ​ 2.表示层:XDR、ASN.1、SMB、AFP、NCP ​ 3.会话层:ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets4.传输层:*TCP*、UDP、RTP、SCTP、SPX、ATP、IL ​ 5.网络层:IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25 ​ 6.数据链路层: 以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP ​ 7.物理层:线路、无线电、光纤、信鸽

2.TCP/IP四层网络模型

1.由于OSI是一个理想的模型,因此一般网络系统只涉及其中的几层,很少有系统能够具有所有的七层。下面是四层的分布:           ​​
                        

2.1 TCP / IP 链接

1.手机能上网是因为手机底层实现了TCP/ IP 协议。 ​ 2.TCP连接需要建立 “三次握手”,如下图所示                         ​

①第一次握手:Client将SYN置1,随机产生一个初始序列号seq发送给Server,进入SYN_SENT状态,等待服务器确认; ​ (SYN=1,seq=x,x为随机生成数值)

②第二次握手:服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK 字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。 ​ (SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接。

③第三次握手:客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回 复。(SYN=1,ACK=y+1,seq=x+1)

2.2TCP的四次挥手(简称四次断开)

①第一次挥手:客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断 开TCP连接。(FIN=1,seq=x,x由客户端随机生成) ②第二次挥手:服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客 户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1, seq=y,y由服务端随机生成) ③第三次挥手:服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完 毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生 成) ④第四次挥手:客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请 求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成)至此TCP断开的4次挥手过程 完毕。 文字加图片通俗易懂如下图所示:
                               

补充问题:1.为什么连接的时候是三次握手,断开的时候却是四次挥手?
       因为:Server(服务端)只能先回复一个ACK报文,告诉Client(客户端);“你发的报文我收到了。”只有等到我Server(服务端)所有的报文都发送完了, 我才能跟你(客户端)发送FIN报文,因此不能一起发送,故需要四次握手。

2.TCP握手为什么刚好是三次?
       因为:TCP三次握手确保连接的建立是同步的,避免资源浪费,并同步双方的序列号。这有助于防止重复和丢失数据包,确保它们按正确顺序传输。

3.如果已经建立了连接,但是客户端突然出现故障了怎么办?
       因为: TCP内部设有一个计时器,如果客户端出现故障,服务器不能一直等待下去,否则,会白白浪费资源。服务器每收到客户端数据的请求,计时器都会重新复位(清零)。时间通常设置为2h,若 两小时后,还没收到客户端的任何数据,服务器就会每隔75秒钟发一次探测报文。若连续发送10次,仍没反应,服务器就认为客户端出了故障,接着就关闭连接。

总结:TCP他不是真正意义上的常连接,会有一个超时过程,如果超2h,没反应会访问10次消息,还是没反应的话,就直接断开连接。

3.socket原理

3.1 socket(套接字)概念:
                           套接字(socket)是通信的基石, 我们操作TCP/IP的网络通信,不能直接操作它,
                           必须通过它(socket)。它是网络通信过程中端点的 抽象表示,包含了进行网
                           络通信必须的五种信息:连接     使用的协议,本地主机的IP地址,本地进程
                           的协议端口,远程主机的IP地址,远 程进程的协议端口。
3.2、建立socket连接:至少需要一对套接字,其中一个运行于客户端(即ClientSocket), 
                                     另一个运行于服务器端(即ServerSocket) 。它们之间的连接过程
                                     分三步骤:①服务监听,②客户端请求,③连接确认

        ①服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,
                                 实时监控网络状态,等待客户端的连接请求

        ②客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。
                                 为此,客户端的套接字必须首先描述它要连接的服务器的套接 字,
                                 指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接
                                 请求。

        ③连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客
                              户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客端,
                              一旦客户端确认了此描述,双方就正式建立连接。客户端确认后,双方即建立
                              连接。而服务器端套接字继续处于 监听状态,继续接收其他客户端套接字的连
                              接请求。

3.3、SOCKET连接与TCP/IP连接:
              (1)创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层议
                     (TCP或UDP),当使用TCP协议进行连接时,该 Socket连接就是一个TCP连接。

              (2)socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议
                       是传输层协议,主要解决数据 如何在网络中传输,而 HTTP是应用层协议,主要解
                       决如何包装数据。关于TCP/IP和HTTP协议的关系,

              (3)网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)
                         TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数 据内容,如果
                         想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,
                         比如HTTP、 FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协
                         议作应用层协议,以封装HTTP文本信 息,然后使用TCP/IP做传输层协议将它发到
                         网络上。”

             (4)我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,
                       Socket本身并不是协议,而是一个调用接口(API),通过 Socket,我们才能使用
                       TCP/IP协议。 实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在
                       设计的时候,就希望也能适应其他的 网络协议。所以说,Socket的出现 只是使得程
                       序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知
                       道的一些最 基本的函数接口,比如create、 listen、connect、accept、send、
                       read和write等等

             (5)网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:“TCP/IP只是一个协
                      议栈,就像操作系统的运行机制一样,必须要具体实现, 同时还要提供对外的操作
                      接口。这个就像操作系统会提供标准的编程接口, 比如win32编程接口一样,
                      TCP/IP也要提供可供程序员做网络开发所用的接 口,这就是Socket编程接口。”

             (6)实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传
                      输层的TCP协议的,而Socket本身不算是协议,就像上面 所说,它只是提供了一个
                      针对TCP或者UDP编程的接口。socket是对端口通信开发的工具,它要更底层一些.

3.4、Socket连接与HTTP连接:
             (1)由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即
                      可开始相互发送数据内容,直到双方连接断开。但在实际 网络应用中,客户端到服
                      务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分
                      防火墙默认会关闭长时间处于非 活跃状态的连接而导致 Socket 连接断连,因此需要
                      通过轮询告诉网络,该连接处于活跃状态。

             (2)而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需
                      要客户端向服务器发出请求后,服务器端才能回复数据。

             (3)很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实
                      时与同步。此时若双方建立的是Socket连接,服务器就可 以直接将数据传送给客户
                      端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数
                      据传回给客户端,因此,客户端 定时向服务器端发送连接请求,不仅可以保持在
                      线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

3.5、http协议是应用层的协义

              (1) 有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是
                   发动机,提供了网络通信的能力。

              (2) 两个计算机之间的交流无非是两个端口之间的数据通信,具体的数据会以什么样的形式
                   展现是以不同的应用层协议来定义的如HTTPFTP`...

本文参考下面博文:最全的socket,tcp,http三者之间的区别和原理_cocket与tcpip-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_52467164/article/details/119754002

标签:HTTP,Socket,seq,IP,TCP,连接,客户端
From: https://blog.csdn.net/2302_77028048/article/details/140108117

相关文章

  • 术业有专攻,不要用原生 http 库自己写爬虫!
    术业有专攻,不要用原生http库自己写爬虫!网管叨bi叨 2024-06-0509:27 北京 3人听过 以下文章来源于凉凉的知识库 ,作者凉凉的知识库凉凉的知识库.凉凉的知识库,带你学点后端必备知识有些人可能认为爬虫框架和httpclient库的功能一样,用httpclient库也可以写......
  • 为什么网络爬虫广泛使用HTTP代理?
    一、引言网络爬虫作为自动抓取互联网信息的重要工具,在现代社会中发挥着不可或缺的作用。然而随着网络环境的日益复杂,网站反爬虫技术的不断进步,网络爬虫在获取数据的过程中面临着越来越多的挑战。为了应对这些挑战,HTTP代理成为了网络爬虫不可或缺的一部分。本文将从多个角度详......
  • 为什么网络爬虫广泛使用HTTP代理?
    一、引言网络爬虫作为自动抓取互联网信息的重要工具,在现代社会中发挥着不可或缺的作用。然而随着网络环境的日益复杂,网站反爬虫技术的不断进步,网络爬虫在获取数据的过程中面临着越来越多的挑战。为了应对这些挑战,HTTP代理成为了网络爬虫不可或缺的一部分。本文将从多个角度详......
  • 为什么网络爬虫广泛使用HTTP代理?
    一、引言网络爬虫作为自动抓取互联网信息的重要工具,在现代社会中发挥着不可或缺的作用。然而随着网络环境的日益复杂,网站反爬虫技术的不断进步,网络爬虫在获取数据的过程中面临着越来越多的挑战。为了应对这些挑战,HTTP代理成为了网络爬虫不可或缺的一部分。本文将从多个角度详......
  • 为什么网络爬虫广泛使用HTTP代理?
    一、引言网络爬虫作为自动抓取互联网信息的重要工具,在现代社会中发挥着不可或缺的作用。然而随着网络环境的日益复杂,网站反爬虫技术的不断进步,网络爬虫在获取数据的过程中面临着越来越多的挑战。为了应对这些挑战,HTTP代理成为了网络爬虫不可或缺的一部分。本文将从多个角度详......
  • [WARNING] Could not validate integrity of download from https://maven.aliyun.com
    问题背景:今天在使用jenkins自动部署项目时,部署失败,查看日志得到如下关键信息[WARNING]Couldnotvalidateintegrityofdownloadfromhttps://maven.aliyun.com/repository/public/log4j/log4j/maven-metadata.xml问题解决:查询jenkins相关资料得到最可能的原因应该......
  • ASP.NET Core MVC 从入门到精通之HttpContext
    原文链接:https://www.cnblogs.com/hsiang/p/17368101.html什么是HttpContext?在B/S模式开发的程序中,客户端是浏览器,服务器端Web服务程序,HttpContext是连接客户端和服务器端程序的桥梁,交代了当前请求的环境信息,它封装了请求[Request]和响应[Response]及其他所有信息,示意图如下所......
  • 鸿蒙技术之WebSocket连接详解
    WebSocket连接详解WebSocket是一种在单个TCP连接上提供全双工通信信道的协议,它允许服务器主动向客户端推送数据,非常适合实时通信和数据交换频繁的应用场景。以下是WebSocket连接的详细步骤和知识点:1.创建WebSocket对象首先,需要通过createWebSocket()方法创建一个WebSock......
  • 深入理解TCP协议格式(WireShark分析)
    传输控制协议(TCP)是互联网中最为关键的通信协议之一。了解TCP协议的细节不仅对于网络工程师至关重要,对于任何涉及网络通信的软件开发人员而言都是必备的知识。本文旨在深入探讨TCP协议,从协议的基本概述到其工作机制,以及如何通过实际代码实现和工具分析来理解其运作。TCP协......
  • Http 1.0、 2.0 跟3.0
    HTTP(HypertextTransferProtocol)的不同版本在互联网的发展历程中扮演了关键角色,每一代版本都在努力提升网络应用的效率、安全性和互操作性。下面是HTTP/1.0、HTTP/2和HTTP/3的主要特点和改进之处:HTTP/1.0发布年代:1996年特点:每个请求/响应都建立在一个独立的TCP连接上。请......