一,TCP/IP协议栈的概述
TCP/IP协议栈是由美国国防部(DoD)在20世纪60年代创建的(比OSI模型还早),是一种具体实现标准。
分为4层:网络接入层(链路层),Internet层(网络层),主机到主机层(传输层),应用层
由于TCP/IP协议栈涉及的知识点很多,而其中最主要的协议是IP协议和TCP协议,故本文主要是针对IP和TCP协议来分析,其他的知识点后续补上。
二,IP协议
IP(Internet Protocol,网际协议)是TCP/IP协议栈中最重要的协议(位于网络层),用于实现数据的不可靠面向无连接通信,实现三层数据封装与IP寻址。
什么是不可靠?
不可靠的意思就是它不能保证IP数据包能百分百到达目的地
什么是面向无连接?
意思是I P并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是 A,然后是B) ,每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。
1.IP头部格式
(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协议栈中算法最多,功能最繁杂的重要的协议(位于传输层)。
- TCP提供的功能
面向连接(三次握手,四次挥手)
可靠传输(超时重传,快速重传)
流量控制(滑动窗口,拥塞控制)
多路复用(套接字,Socket)
2.原理
2.1 面向连接(三次握手,四次挥手)
三次握手:(下图所示)
注:三次握手是一个会话的建立过程,此过程没有正式的数据包的传送。
SYN(同步位)用于实现端口请求,ACK(确认位)用于实现端口回复
四次挥手(见下图):
问题:为什么关闭时要四次,而不是三次呢?
因为在一方传输数据结束的时候,可能另一方还在传输数据,所以需要四次。
2.2 可靠传输
见下图:
利用Seq(序列号)和ACK(确认号)来保证可靠传输。
2.3 流量控制
利用滑动窗口来达到流量控制
2.4 多路复用
利用套接字socket来实现多路复用,socket=ip+port。比如多个客户端要连接同一个服务器,就需要多路复用。