TCP/IP 学习笔记 · TCP/IP 是什么?

TCP/IP 是什么?

TCP/IP 全程是 Transfer Control Protocol/Internet Protocol,即传输控制协议/网际协议。

  • OSI 参考模型
    在这里插入图片描述

  • OSI 与 TCP/OP 参考模型对照图
    OSI与TCP/IP参考模型对照图

OSI由于体系比较复杂,不太方便计算机软件实现,逐渐退出人们关注的视野,TCP/IP 得到了广泛的应用。
TCP/IP 是 Internet 的核心技术,所有的系统、终端、线路、用户、开发者,都必须遵守 TCP/IP 协议族所规定的法则,否则,将不被 IP 世界所接受。

TCP/IP 是一个协议组,不仅包括TCP、IP,还包括 HTTP、TELNET、FTP、UDP、pop3 等,只不过 TCP/IP 这个名字来源于协议组中最重要的两个协议—— TCP(传输控制协议)和 IP (网际协议)。

在这里插入图片描述

TCP/IP 各层主要功能

  1. 网络接口层(数据链路层)

    TCP/IP 并没有严格定义该层,他只要求能够提供给其上层——网络层一个访问接口,以便在其上传递 IP 分组。由于这一层未被定义,所以其具体的实现方法将随着网络类型的不同而不同。

    以太网是 IP 通信中数据链路层最常见的形式,除此之外,还有PPP、HDLC等,10Gbit/s 以下的以太网一般用于局域网,而PPP、HDLC 则应用于广域网范围更多。

  2. 网络层(Internet Layer)
    网络层俗称 IP 层,它处理机器之间的通信。IP 是一个不可靠,无连接协议,它接受来自传输层的请求,传输某个具有目的地址信息的分组。该层把分组封装到 IP 数据报中,填入数据报的首部(也称为报头),使用路由算法来选择是直接把数据报发送到目标及还是

  3. 传输层
    传输控制协议(Transmission Control Protocol,TCP)和用户数据报协议(User Datagram Protocol,UDP)是该层的重要协议。

    TCP 是一个面向连接的、可靠的协议。
    在发送端:它负责把上层传输下来的的字接口分成报文段并传递给下层。在接收端:它负责把收到的报文进行重组后递交给上层。TCP 还要处理端到端的流量控制。
    UDP 是一个不可靠、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。

TCP 报文格式

TCP 报文包括首部(报头)和数据部分,其中首部的具体字段如下:

TCP 报文

  1. 源端口与目的端口字段——各占 16bit。端口是传输层与应用层的服务接口。
  2. 序号字段—— SEQ 序号,占 32bit。TCP 连接中传输的数据流中的每一个字节都编上一个序号,序号字段的值则值得是本报文段所发送的数据的第一个字节的序号。
  3. 确认序号:ACK 序号,占 32bit,是期望收到对方的下一个报文段的数据的第一个字节的序号。只有 ACK 标志位为 1 的时候,确认序号字段才有效,ACK = SEQ + 1。
  4. 标志位:共 6 个,即 URG、ACK、PSH、RST、SYN、FIN 等。
  5. 数据偏移——占 4bit ,它指出TCP报文段的数据起始处距离 TCP 报文段段起始处有多远。
  6. 窗口字段——占 16bit,窗口字段用来控制对方发送的数量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
  7. 检验和——占 16bit。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
  8. 紧急指针字段——占 16bit。紧急指针在本报文段中的紧急数据的最后一个字节的序号。
  9. 选项字段——长度可变。
    10.保留字段——占 6bit,保留为今后使用,但目前应置为 0 。

TCP 的三次握手和四次挥手

TCP 的连接和建立都是采用客户服务器方式。主动发起连接建立的应用进程叫做客户(Client)。被动等待连接建立的应用程序进程叫做服务器(server)。

建立 TCP 需要三次握手才能建立,而断开连接则需要四次挥手。整个过程见下图:
TCP 建立连接、传输数据、释放连接

(1)三次握手

在 TCP/IP 中,采用三次握手建立一个连接三次握手

第一次握手:Client(主机A)向 Server(主机B)发送一个连接请求,在这个包中,标志位 SYN = 1,发送序号 SEQ = x,上图中 x = 200,Client 进入 SYN_SEND 状态,等待 Server 确认。

第二次握手:Server 收到数据包后由标志位 SYN = 1 知道 Client 请求建立连接,Server 将标志位 SYN 和 ACK 都置为 1,确认序号 ACK = x + 1 = 201,随机产生一个发送序号 SEQ = y,上图 y = 500,并将该数据包发送给 Client 以确认连接请求,Server 进入 SYN_RCVD 状态。

第三次握手:Client 收到确认收,检查确认序列号 ACK 是否为 x + 1 = 201,标志位ACK是否为1,如果正确,则将标志位 ACK 置为1,确认序号 ACK = y+1 = 501,并将该数据包发送给Server,Server 检查确认序号ACK是否为 y + 1 = 501,标志位 ACK 是否为 1,如果正确则连接建立成功,Client 和 Server 进入 ESTABLISHED 状态。

完成三次握手,客户端与服务器开始传输数据。

(2)四次挥手

四次挥手(Four-Way Wavehand)即终止 TCP 连接,就是指断开一个 TCP 连接时,需要客户端和服务端总共发出 4 个包以确认连接的断开,如下图:
四次挥手

第一次挥手:当客户 A 要断开 TCP 连接时,发送一个包。其中标志位 FIN = 1,ACK = 1,发送序号 SEQ = x,确认序号 ACK = y,上图中 x = 200,y = 500。Client 进入 FIN_WAIT 状态。

第二次挥手:客户 B 知道 A 要断开后,发送一个确认包,其中,标志位 FIN = 1,发送序号 SEQ = y+1 = 501,Server 进入 LAST_ACK 状态。

第三次挥手:客户 B 也断开 TCP 连接,此时发送一个包,其中,标志位 FIN = 1,发送序号 SEQ = y+1 = 500,Server 也进入 LAST_ACK 状态。

第四次挥手:客户 A 收到 B 的断开请求后,Client 进入 TIME_WAIT 状态,接着发送一个确认包,标志位 ACK = 1,发送序号 SEQ = x+1 = 201,确认序号 ACK = y+2 = 502;Server 进入 CLOSED 状态。

TCP/IP 协议体系常见术语


  1. 包(packet)是网络上传输的数据片段,也成位分组。包是一种统称,在不同的协议不同的层次,包有不同的名字。
    如 TCP/IP ,数据链路层的包叫帧(Frame)。IP 层的包称为 IP 数据报,TCP 层的包通常被称为 TCP 报文等,大多数包都有包头和信息组成。包头常常包括诸如源和目的地址、包的长度和类型指示符等信息;信息部分可以是原始数据,也可以包含另一个包。

  2. 封装
    不同设备的对等层之间依靠封装和解封来实现相互间的通信。

    TCP/IP 也是一种计算机书籍打包和寻址的标准方法,在数据传输过程中,可以形象地理解为有两个信封,这两个信封分别是 TCP 和 IP。

    在发送端,要传递的信息被划分成若干段,每一段塞入一个 TCP 信封,并在该信封上记录有分段号的信息,再将 TCP 信封塞入 IP 大信封,发送到网上。

    在接收端,一个 TCP 软件包收集信息,抽出数据,按发送前的顺序还原,并加以校验,若发现差错,TCP 将会要求重新发送。因此,TCP/IP 在互联网中几乎可以无差错的传输数据。

主机通信过程

在通信过程中,TCP/IP 每一层都让数据得以通过网络进行传输,这些层之间使用协议数据单元(Protocol Data Unit,PDU)彼此交换信息,确保网络设备之间能够通信。
不同层的 PDU 中包含有不同的信息,因此 PDU 在不同层被赋予了不同的名称。

  • 封装过程

传输层在上层数据中加入 TCP 报头后得到的 PDU 被称为数据段(Segment);

数据段被传递给网络层,网络层添加 IP 包头得到的 PDU 被称为数据包(Packet);

数据包被传递到数据链路层,封装数据链路层报头得到的 PDU 被称为数据帧(Frame);

最后,帧被转换成比特(Bit),通过网络介质传输。这种协议栈向下传递数据,并添加报头和报尾的过程,称为“封装”

  • 解封装过程

数据被封装并通过网络介质传输后,接收设备将删除添加的信息,并根据报头中的信息,决定如何将数据沿协议栈上传给合适的应用程序,这个过程称为“解封装”。


参考文献:《一本书读懂TCP/IP》

猜你喜欢

转载自blog.csdn.net/weixin_36908494/article/details/106312481