一,TCP/IP协议栈的概述

    TCP/IP协议栈是由美国国防部(DoD)在20世纪60年代创建的(比OSI模型还早),是一种具体实现标准。

    分为4层:网络接入层(链路层),Internet层(网络层),主机到主机层(传输层),应用层

    IP协议和TCP协议的分析_第1张图片

    由于TCP/IP协议栈涉及的知识点很多,而其中最主要的协议是IP协议和TCP协议,故本文主要是针对IP和TCP协议来分析,其他的知识点后续补上。

二,IP协议

    IP(Internet Protocol,网际协议)是TCP/IP协议栈中最重要的协议(位于网络层),用于实现数据的不可靠面向无连接通信,实现三层数据封装与IP寻址。

    什么是不可靠?

      不可靠的意思就是它不能保证IP数据包能百分百到达目的地

    什么是面向无连接?

      意思是I P并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是 A,然后是B) ,每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。

1.IP头部格式

 IP协议和TCP协议的分析_第2张图片

  (1)版本

       4bit,用于标记IP协议的版本。IPv4---->4;IPv6--->6.

  (2)首部长度

       4bit,可表示的最大十进制为15.指示IP报头长度,指出IP报头的结束位置或数据的开始位置

       接收方可知道如何根据首部长度来解封装

  (3)服务类型

       ToS,8bit,提供QoS服务质量技术用于实现流量标记

  (4)总长度

       总长度指首部和数据之和的长度,单位为字节。字段16bit。

  (5)标识符

       16bit,用于标志分片的进程

  (6)标志符

       3bit,第一个比特位0:表示保留或未使用;第二个比特DF位:DF=1,表示该数据包不应该被分段;DF=0,表示可以根据需要对数据包进行分段。第三个比特位MF位:表示该分段是最后一个分段(比特为0)或者后面更多的分段(比特为1)。

  (7)片偏移量

       13bit,用于告知接收方每个分片距离IP头部的位置,才能实现有序的重新组装

  (8)生存时间

       8bit,TTL最大值为255;标记路径和防环。

  (9)协议

       8bit,标记上层协议

  (10)首部检验和

       16bit,校验数据包的完整性

  (11)源IP地址

        32bit,发送者的IP地址

  (12)目的IP地址  

        32bit,接收者的IP地址 

  (13)选项

        options,可变长度该字段为可选字段

        常见:记录路由选项,时间戳选项以及用来增强traceroute程序的路由选项

  (14)填充

        Padding,可变长度,如果IP报头大小不是32比特的整数倍,则会在报头填充0直至32比特

  (15)数据

        可变长度,是在IP包中进行传输并通过协议字段进行标识的数据



三,TCP协议

    TCP(Transmission Control Protocol,传输控制协议)是TCP/IP协议栈中算法最多,功能最繁杂的重要的协议(位于传输层)。

  1. TCP提供的功能

    面向连接(三次握手,四次挥手)

    可靠传输(超时重传,快速重传)

    流量控制(滑动窗口,拥塞控制)

    多路复用(套接字,Socket)

2.原理

 2.1 面向连接(三次握手,四次挥手)

   三次握手:(下图所示)

     IP协议和TCP协议的分析_第3张图片

注:三次握手是一个会话的建立过程,此过程没有正式的数据包的传送。

    SYN(同步位)用于实现端口请求,ACK(确认位)用于实现端口回复


  四次挥手(见下图):

   IP协议和TCP协议的分析_第4张图片


问题:为什么关闭时要四次,而不是三次呢?

      因为在一方传输数据结束的时候,可能另一方还在传输数据,所以需要四次。


 2.2 可靠传输

   见下图:

    IP协议和TCP协议的分析_第5张图片利用Seq(序列号)和ACK(确认号)来保证可靠传输。


 2.3 流量控制

    利用滑动窗口来达到流量控制

 2.4 多路复用

    利用套接字socket来实现多路复用,socket=ip+port。比如多个客户端要连接同一个服务器,就需要多路复用。