当前位置:   article > 正文

TCP/IP四层协议详解、TCP/IP三次握手、四次挥手_tcp sici

tcp sici

一、TCP/IP四层协议模型

在这里插入图片描述
在这里插入图片描述

各层的主要功能:

01_链路层(数据链路层/网络接口层)

  • 数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介(比如以太网、令牌环等)上的传输。
  • 数据链路层两个常用的协议是ARP协议(Address Resolve Protocol,地址解析协议)和RARP协议(ReverseAddress Resolve Protocol,逆地址解析协议)。它们实现了IP地址和机器物理地址(通常是MAC地址,以太网、令牌环和802.11无线网络都使用MAC地址)之间的相互转换。
  • 网络层使用IP地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务,这就是ARP协议的用途。
  • RARP协议仅用于网络上的某些无盘工作站。因为缺乏存储设备,无盘工作站无法记住自己的IP地址,但它们可以利用网卡上的物理地址来向网络管理者(服务器或网络管理软件)查询自身的IP地址。运行RARP服务的网络管理者通常存有该网络上所有机器的物理地址到IP地址的映射。

02_网络层

  • 网络层是整个TCP/IP协议栈的核心。网际层主要是解决数据由一个计算机的IP如何路由到目标计算机的过程规范,它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。
  • 网络层最核心的协议是IP协议(Internet Protocol,因特网协议)。IP协议根据数据包的目的IP地址来决定如何投递它。如果数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳(next hop)路由器,并将数据包交付给该路由器来转发。多次重复这一过程,数据包最终到达目标主机,或者由于发送失败而被丢弃。可见,IP协议使用逐跳(hop by hop)的方式确定通信路径。
  • 网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互连层还需要完成拥塞控制的功能。

03_传输层

  • 传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmission control protocol)和用户数据报协议UDP(user datagram protocol)。
  • TCP协议是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据。
  • UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。

04_应用层

  • TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。应用层负责处理应用程序的逻辑。应用层在用户空间实现,因为它负责处理众多逻辑,比如文件传输、名称查询和网络管理等。
  • 应用层面向不同的网络应用引入了不同的应用层协议。其中,有基于TCP协议的,如文件传输协议(File Transfer Protocol,FTP)、虚拟终端协议(TELNET)、超文本传输协议(Hyper Text Transfer Protocol,HTTP),也有基于UDP协议的。

二、TCP三次握手,四次挥手

  • SYN:代表请求创建链接,在三次握手时发送了两次,因为TCP是全双工双向的,所以要双向创立连接。

  • FIN:代表创建断开连接,在四次挥手时发送了两次,双向断开连接。

  • ACK:代表确认接受,在三次握手和四次挥手,当回应时都会加上ACK=1,表示确认接收到消息

  • Seq:代表发送序列号,数据发送时,数据是拆分成许多数据包进行发送的,序列号对每个数据包进行编号,以便接收方将数据进行拼接。

  • ack:确认序列号,上一个序列号+1

01_TCP三次握手

在这里插入图片描述

具体流程:

  • 第一次握手:
    客户端将标志SNY置为1,随机产生一个发送序列号为Seq=x;并将该数据包发送给服务器,客户端进入SYN_SENT状态,等待服务器确认。
  • 第二次握手:
    服务端收到该数据包,并由SNY=1得知客户端请求建立连接;将SNY,ACK置为1,将ack置为x+1,随机产生一个y并赋予发送序列号Seq;将该数据包发送给客户端确认请求,进入SYN_RCVD状态。
  • 第三次握手:
    客户端收到该数据包后。判断ack是否为x+1,ACK是否为1;如果正确则将ACK置为1,ack置为y+1;并将该数据包发送给服务端,服务端判ACK=1,ack=Y+1,如果正确客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

简述三次握手流程:

  1. 客户端向服务端发送SYN=1,请求建立连接
  2. 服务端向客户端返回ACK=1,表示接收到请求;同时,发送SYN=1,请求建立连接
  3. 客户端向服务端返回ACK=1,确认接收到连接请求,

02_TCP四次挥手

在这里插入图片描述

  1. 第一次挥手:
    客户端发送一个FIN=1,发送序列号u(等于已传送数据的最后一个字节的序号加1)用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态。此状态含义为:如果服务端还存在未发送完的数据,则等待发送成功后在关闭,此时等待关闭。
  2. 第二次挥手:
    服务端收到客户端的FIN=1请求后,返回一个ack=u+1告诉客户端,还存在需要发送的数据,继续等待关闭,客户端进入FIN_WAIT_2状态,继续等待服务端的FIN报文。
  3. 第三次挥手:
    当服务端确认没有数据时,向客户端发送FIN=1,序列号为w,ack=u+1告诉客户端,我准备好了准备关闭连接,服务端进入LAST_ACK状态。
  4. 第四次挥手:
    客户端收到报文后,知道可以关闭连接,但是不相信网络,怕服务器不知道要进行关闭,所以发送ack=w+1,,ACK=1,seq=u+1进入TIME_WAIT状态,如果服务端没收到ACK=1,则重传;收到则断开连接。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,客户端也可以关闭连接了。最终完成了四次握手。

简述四次挥手流程:

  1. 客户端向服务端发送Fin请求断开连接
  2. 服务端向客户端返回ACK=1,表示接收到请求。
  3. 虽然客户端请求断开连接,但是客户端可能还有数据正在传输,所以等待传输结束,服务端向客户端发送Fin请求断开连接
  4. 客户端及接收到服务端请求断开连接后,向服务段发送ACK=1,表示接收到请求。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/148921
推荐阅读
相关标签
  

闽ICP备14008679号