Python服务器运维笔记:第二章Linux - 1.2.8 TCP/IP协议
前言:本文是学习网易微专业的《python全栈工程师》 中的《服务器运维开发工程师》专题的课程笔记,欢迎学习交流。同时感谢老师们的精彩传授!
一、课程目标
-
ipv4
协议 -
tcp
协议 -
udp
协议
二、详情解读
2.1.IP
协议
ip
协议规定了数据怎么从一台主机传输到另一台主机。
2.1.1.数据的传输
2.1.2.IP
数据包
首部长度:IP
头部的大小,固定部分是5
行,另有可选部分
区分服务器:
由8
位组成,表明服务质量。0~2
位表示0~7
的优先级别3位:
最低延迟4位:
最大吞吐5位:
最大可靠性6位:
最小代价
总长度:IP
首部 + 数据部分总长
总长不能超过 ,所以在的数据需要折成片段。
标识: 16
位组成,用于分片重组,同一个分片的标识相同。
标志: 3
位组成0
位:0
1
位:是否进行分片。0
可以分,1
不可分2
位:是否为最后一个包,0
为最后一个包
片偏移:13
位组成,用来标识数据片段的位置,第一个分片为0
,单位是字节。
生存时间:8
位组成,每经过一个路由吕减1
,变为0
时,弃包。
协议:IP
传输上层协议。比如:ICMP、TCP、UDP、......
首部校验和:16
位组成,用来检验IP
首部是否被破坏。
源地址:32
位组成,发送端IP
目标地址:32
位组成,接受端IP
2.1.3.数据传输
IP
数据包内的数据部分就是TCP
或者UPD
数据包,如下图所示:
数据传输打包或者解包过程,如下图所示:
2.2.TCP
协议
tcp
协议是面向连接的可靠的流数据协议。tcp
数据传输首先需要在两端之间建立虚拟连接,通过顺序控制与生发控制保证数据传输可靠性。
tcp
由于需要建立连接,以及数据包纠正,所以不适合高速传输与实时性很高的场合,比如视频直播,语音通讯。
2.2.1.tcp
数据报
源端口号:16
位组成,发送端端口号
目标端口号:16
位,接收端端口号
通常服务器端口号为固定的,客户端端口号为临时的。
***(Sequence Number):32
位,发送数据的位置,每发送一次累加该次字节数,第一次产生一个随机数,在这个基础上累加。
确认应答号(Acknowledgement Number):32
位,下一次应该收到的数据***,发送端收到这个信号就认为之前的数据发送成功。
数据偏移(Data Offset):4
位,TCP
首部长度,固定长为20
个字节,即值为5
控制位(Controller flag):URG:
该位为1
,表示需要紧急处理ACK:
该位为1
,表示应答有效PSK:
该位为1
,表示将收的数据提交给上层应用协议RST:
该位为1
,表示tcp
连接异常,强制断开SYN:
该位为1
,表示用于建立连接FIN:
该位为1
,表示通讯结束,希望断开连接
窗口大小(window size):16
位,发送数据最大限制,如果为0
,可以发送窗口探测
检验和:
检验数据是否完整与是否被修改
紧急指针:
紧急数据位置
2.2.2.tcp
协议创建连接与断开连接过程
2.2.UDP
协议
UDP
协议不提供复杂的数据传输控制机制,面向无连接的通信服务,它将应用程序按照原样在网络传输。
对于数据包顺序,丢包等问题,由应用程序解决。UDP
适用场合:
1.包总量很小的场合
2.即时通信
3.局域网内通信
4.广播通信
2.2.1.udp
数据报头
三、课程小结
- 01
IPV4
协议 - 02
TCP
协议 - 03
UDP
协议