TCP/IP的三次握手与四次挥手

TCP/IP协议

1.TCP/IP(Transmission Control Protocol / Internet Protocol) 中文译为传输控制协议/因特网互联协议。
2.其他知名的协议还有HTTP、HTTPS、FTP、SMTP、UDP、ARP、PPP、IEEE802.x等。
TCP/IP的三次握手与四次挥手_第1张图片

  • 链路层: 单个0,1是没有意义的,链路层以字节为单位把0与1进行分组,定义数据帧,写入源和目标主机的物理地址、数据、检验位来传输数据。
    -网路层: 根据IP定义网络地址,区分网段。子网内根据地址解析协议(ARP)进行MAC地址寻址,子网外进行路由转发数据包,这个数据包即IP数据包。
  • 传输层: 数据包通过网络层发送到目标计算机后,应用程序在传输层定义逻辑端口,确认身份后,将数据包交给应用程序,实现端口到端口间通信。最典型的传输协议是UDP和TCP。UDP只是在IP数据包上增加端口等部分信息,是面向无连接的,是不可靠传输,多用于视频通信、电话会议等(即使少一帧数据也无妨)。与之相反,TCP是面向连接的。所谓面向连接,是一种端到端间通过失败重传机制建立的可靠数据传输方式,给人感觉是有一条固定的通路承载着数据的可靠传输。
  • 应用层: 传输层的数据到达应用程序时,以某种统一规定的协议格式解读数据。比如,E-mail在各个公司的程序界面、操作、管理方式都不一样,但是都能够读取邮件内容,是因为SMTP协议就像是传统的书信格式一样,按规定填写邮编以及收信人信息。
    TCP/IP的三次握手与四次挥手_第2张图片

总结: 程序在发送消息时,应用层按既定的协议打包数据,随后由传输层加上双方的端口号,由网络层加上双方的IP地址,由链路层加上双方的MAC地址,并将数据拆分成数据帧,经过多个路由器和网关后,到达目标机器。简而言之,就是按“端口-IP地址-MAC地址”这样的路径进行数据的封装和发送,解包的时候反过来操作即可。

IP协议

IP是面向无连接、无状态的,没有额外的机制保证发送的包是否有序到达。IP首先规定出IP地址格式,该地址相当于在逻辑意义上进行了网段的划分,给每台计算机额外设置了一个唯一的详细地址。既然链路层可以通过唯一的MAC地址找到机器,为什么还需要通过唯一的IP地址再来标识呢?简单的说,在世界范围内,不可能通过广播的方式,从数以万计的计算机里找到目标MAC地址的计算机而超时。在数据投递时就需要对地址进行分层管理。
IP地址属于网络层,主要功能在WLAN内进行路由寻址,选择最佳路由。IP报文格式共32位4字节,通过用十进制数来表示。IP地址的掩码oxffffff00表示255.255.255.0,掩码相同,则在同一子网内。IP协议在IP报头中记录源IP地址和目标IP地址。
TCP/IP的三次握手与四次挥手_第3张图片

  • 数据包的生存时间TTL(Time To Live),该字段表示IP报文被路由器丢弃之前可经过的最多路由总数。TTL初始值由源主机设置后,数据包在传输过程中每经过一个路由器TTL值减1,当字段为0时,数据包被丢弃,并发送ICMP报文通知源主机,以防止源主机无休止地发生报文。
  • ICMP(Internet Cortrol Message Protocol),它是检测传输网络是否通畅、主机是否可达、路由是否可用等网络运行状态的协议。ICMP不传输用户数据,但是对评估网络健康状态非常重要,经常使用的ping、tracert命令就是基于ICMP检测网络状态的有力工具。
  • 挂载标识,表示IP数据包里放置的子数据包里放置的子数据包协议类型,6代表TCP、17代表UDP等。
  • IP是TCP/IP的基石,几乎所有其他协议都建立在IP所提供的服务基础上进行传输,其中包括在实际应用中用于传输稳定有序数据的TCP。

TCP建立连接

传输控制协议(TCP),是一种面向连接、确保数据在端到端间可靠传输的协议。面向连接是指在发送数据前,需要先建立一条虚拟的链路,然后让数据在这条链路上“流动”完成传输。为了确保数据的可靠传输,不仅需要对每一个字节进行编号确认,校验每一个数据包的有效性,再出现超时情况时进行重传,还需要通过滑动窗口和拥塞控制机制,避免网络状况恶化而最终影响数据传输的极端情形。每个TCP数据包是封装在IP包中的,每一个IP头的后面紧接着的是TCP头。

TCP/IP的三次握手与四次挥手_第4张图片
协议第一行的两个端口号各占两个字节,分别表示了源机器和目标机器的端口号。这两个端口号与IP报头中的源IP地址和目标IP地址所组成的四元组可唯一标识一条TCP连接。由于TCP是面向连接的,因此有服务端和客户端之分。需要服务端先在相应的端口上进行监听,准备好接收客户端发起的建立连接请求。当客户端发起第一个请求建立连接的TCP包时,目标机器端口就是服务端所监听的端口号。比如HTTP服务的80端口、HTTPS服务的443端口、SSH服务的22端口等。netstat命令列出机器上以建立的连接信息,其中包含唯一标识一条连接的四元组,以及各连接的状态等内容。
协议的第二行和第三行是序列号,各占4个字节。前提是指所发送数据包中数据部分第一个字节的序号,后者是指期望收到来自对方的下一个数据包中数据部分第一个字节的序号。
由于TCP报头中存在一些扩展字段,所以需要通过长度为4个bit的头部长度字段表示TCP报头的大小,这样接收方才能准确地计算出包中数据部分的开始位置。
TCP的FLAG位由6个bit组成,分别代表SYN、ACK、FIN、URG、PSH、RST,都以置1表示有效。重点关注SYN、ACK和FIN。SYN用作建立连接时的同步信号;ACK用于对收到的数据进行确认,所确认的数据有确认序列号表示;FIN表示后面没有数据需要发送,通常意味着所建立的连接需要关闭了。

TCP的三次握手

B机器是服务端,A机器是客户端,B需要在A发起连接建立请求时先打开某个端口等待数据传输,否则将无法正常建立连接。三次握手指的是建立连接的过程。

  • A机器发出一个数据包并将SYN置1,表示希望建立连接。这个包中的序列号假设是x。
  • B机器收到A机器发过来的数据包后,通过SYN得知这是一个建立连接的请求,于是发送一个响应包并将SYN和ACK标记都置1。假设这个包中的序列号是y,而确认序列号必须是x+1,表示收到了A发过来的SYN。在TCP中,SYN被当作数据部分的一个字节。
  • A收到了B的响应包后需要进行确认,确认包中将ACK置1,并将确认序列号设置为y+1,表示收到了来自B的SYN。

TCP/IP的三次握手与四次挥手_第5张图片
三次握手的主要目的: 信息对等和防止超时。先从信息对等角度来看,双方只有确定4类信息,才能建立连接。在第2次握手后,从B机器视角来看还有两个红色的NO信息无法确认。在第三次握手后,B机器才能确认自己的发报能力和对方的收报能力是正常的。

TCP的四次挥手

TCP是全双工通信,双方都能作为数据的发送方和接收方,但TCP连接也会有断开的时候。所谓相爱容易分手难,建立连接只有三次,而挥手断开则需要四次。

  • A机器想要关闭连接,则待本方数据发送完完毕后,传递FIN信号给B机器。
  • B机器应答ACK,告诉A机器可以断开,但是需要等B机器处理完数据,再主动给A机器发送FIN信号。
  • A机器处于半闭状态(FIN_WAIT_2),无法在发送新的数据。B机器做好连接关闭前的准备工作后,发送FIN给A机器,此时B机器也进入半闭状态(CLOSE_WAIT)。
  • A机器发送针对B机器FIN的ACK后,进入TIME_WAIT状态,经过2MAL后,没有收到B机器传来的报文,则确定B机器已经收到A机器的最后返送的ACK指令,此时TCP连接正式断开。

TCP/IP的三次握手与四次挥手_第6张图片

你可能感兴趣的:(码出高效,网络协议)