TCP/IP协议 (史上最全讲解)

文章目录

  • 一、UDP
    • 1.1网络原生情况
    • 1.2概念
    • 1.3UDP特点
        • 无连接
        • 不可靠
        • 面向数据报
        • 缓冲区
        • 大小受限
    • 1.4UDP协议端格式
        • 校验和
    • 1.5缓冲区
    • 1.6UDP发送过程
    • 1.7UDP接受过程
  • 二、TCP
    • 2.1可靠性的定义(记忆)
      • 如何保证可靠性
    • 2.2TCP原理:确认机制(记忆)
      • 数据编号:序列号
      • segment身兼两职
      • 数据确认在segment中的体现
    • 2.3TCP原理:超时重传机制
      • 发生重传的可能情况
      • 序列号去重效果
      • 合理设定超时时间
      • 重发次数设定
    • 2.4 TCP发送缓冲区
      • TCP具有发送缓冲区的意义
      • TCP发送成功的标志?
      • 为什么ISN(初始序列号)不使用0?
    • 2.5TCP原理:连接管理机制
      • 建立连接(握手阶段)
      • 常见面时题:握手的三次阶段
      • SYN标志位和ACK标志位
      • SYN序列号变化
      • Wireshark演示三次握手
      • 三次握手总结
      • 握手过程中的状态转移
      • 总结
      • 四次挥手
      • CLOSE_WAIT
      • TIME_WAIT
      • TIME_WAIT : 2msl
    • 2.6 TCP中异常情况
      • 进程终止
      • 机器重启或关闭
      • 直接关闭电源
      • 标志位RST
      • 命令行查看主机TCP连接情况
    • 2.7 TCP原理:流量控制Flow Control
    • 2.8滑动窗口机制
    • 2.8TCP原理:拥塞控制
      • 滑动窗口带来的好处
      • 总结
    • 2.9TCP小结
    • 2.10UDP和TCP对比
  • 三、IP
    • 3.1IP地址
      • 特殊IP地址
    • 3.2IP核心功能
    • 3.3Header
    • 3.4IP包解析
    • 3.5补充:数据链路层协议
      • 特殊MAC地址
    • 3.6IP地址换算mac地址
  • 四、补充知识点
    • 4.1 TCP长连接翻译服务
    • 4.2 应用层DNS协议
    • 4.3 NAT协议
    • 4.4 MTU
  • 五、练习

一、UDP

TCP/IP协议 (史上最全讲解)_第1张图片

1.1网络原生情况

TCP/IP协议 (史上最全讲解)_第2张图片

1.2概念

TCP/IP协议 (史上最全讲解)_第3张图片
TCP/IP协议 (史上最全讲解)_第4张图片
TCP/IP协议 (史上最全讲解)_第5张图片

1.3UDP特点

在这里插入图片描述

无连接

知道对端的IP和端口号就直接进行传输,不需要建立连接;

不可靠

没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;并且数据有没有发送给对方,应用层完全不知道

面向数据报

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;
用UDP传输100个字节的数据:如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节;而不能循环接收10次,每次接收10个字节。

缓冲区

UDP只有接收缓冲区,没有发送缓冲区:UDP没有真正意义上的 发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃;UDP的socket既能读,也能写这个概念叫做 全双工
TCP/IP协议 (史上最全讲解)_第6张图片

大小受限

UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。

1.4UDP协议端格式

TCP/IP协议 (史上最全讲解)_第7张图片

校验和

TCP/IP协议 (史上最全讲解)_第8张图片

1.5缓冲区

TCP/IP协议 (史上最全讲解)_第9张图片
TCP/IP协议 (史上最全讲解)_第10张图片

1.6UDP发送过程

TCP/IP协议 (史上最全讲解)_第11张图片

1.7UDP接受过程

TCP/IP协议 (史上最全讲解)_第12张图片

二、TCP

在这里插入图片描述
TCP/IP协议 (史上最全讲解)_第13张图片

2.1可靠性的定义(记忆)

TCP/IP协议 (史上最全讲解)_第14张图片
TCP/IP协议 (史上最全讲解)_第15张图片

如何保证可靠性

TCP 通过检验和、序列号、确认应答机制、超时重传机制、连接管理以及窗口控制等机制实现可靠性传输。

2.2TCP原理:确认机制(记忆)

在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知,这个消息叫做确认应答(ACK)。
TCP/IP协议 (史上最全讲解)_第16张图片

数据编号:序列号

如果同时发送多份数据,如何确认对方收到的是哪一份数据?
TCP将每个字节的数据都进行了编号。即为序列号。
TCP/IP协议 (史上最全讲解)_第17张图片
一个字节占一个序列号,初识序列号一般不是0,相对值可以记为0
TCP/IP协议 (史上最全讲解)_第18张图片
TCP/IP协议 (史上最全讲解)_第19张图片

segment身兼两职

TCP/IP协议 (史上最全讲解)_第20张图片

数据确认在segment中的体现

每个标志位占一个bit
ASN要从收到的数据序列号的下一个序列号开始发送,并且ASN只有在ACK标志位=1时才具有意义
TCP/IP协议 (史上最全讲解)_第21张图片

2.3TCP原理:超时重传机制

如果没有收到对方确认,假设对方是正常工作,这样的情况该如何处理?
在这里插入图片描述

发生重传的可能情况

TCP/IP协议 (史上最全讲解)_第22张图片

序列号去重效果

序列号可以做到去重的效果,接收方可以通过SN判断是否重复收到相同的数据,此时接收方可以不接收重复数据,但是ACK还是需要发送的
TCP/IP协议 (史上最全讲解)_第23张图片

合理设定超时时间

TCP/IP协议 (史上最全讲解)_第24张图片

动态计算最大超时时间:
TCP/IP协议 (史上最全讲解)_第25张图片

重发次数设定

重发也不会无脑重发,万一网络断了无论重发多少次都没有意义,一般是尝试几次收不到ACK就停止发送,不同的OS次数不同
TCP/IP协议 (史上最全讲解)_第26张图片

2.4 TCP发送缓冲区

TCP具有发送缓冲区的意义

TCP/IP协议 (史上最全讲解)_第27张图片
UDP是没有发送缓冲区的

TCP发送成功的标志?

TCP很少出现发送失败的情况,发送失败只可能是缓冲区里放不下数据了
TCP/IP协议 (史上最全讲解)_第28张图片

为什么ISN(初始序列号)不使用0?

使用随机值避免恶意用户推算合法SN的值
TCP/IP协议 (史上最全讲解)_第29张图片

2.5TCP原理:连接管理机制

TCP/IP协议 (史上最全讲解)_第30张图片
TCP/IP协议 (史上最全讲解)_第31张图片

建立连接(握手阶段)

客户端和服务器是在应用层的概念
主动连接方一般是客户端
TCP/IP协议 (史上最全讲解)_第32张图片
syn segment:同步信息
第2次和第3次一般是同步的,同步信息时也同时可以确认信息
TCP/IP协议 (史上最全讲解)_第33张图片

常见面时题:握手的三次阶段

第一次握手:客户端发送syn包到服务器,并进入SYN_SENT状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
TCP/IP协议 (史上最全讲解)_第34张图片

SYN标志位和ACK标志位

将SYN和ACK同时置为1就表示第二次握手阶段
不能携带数据的原因是:不能确定连接成功,携带数据可能提高发送成本
TCP/IP协议 (史上最全讲解)_第35张图片

SYN序列号变化

ACK没有置为1,ASN确认序列号没有意义
len数据长度,三次握手阶段不携带数据,所以数据长度为0
TCP/IP协议 (史上最全讲解)_第36张图片

Wireshark演示三次握手

在这里插入图片描述
蓝色部分:二进制包头
TCP/IP协议 (史上最全讲解)_第37张图片
ack:
TCP/IP协议 (史上最全讲解)_第38张图片

三次握手总结

TCP/IP协议 (史上最全讲解)_第39张图片

握手过程中的状态转移

建立连接阶段:
TCP/IP协议 (史上最全讲解)_第40张图片
开始时:客户端与服务器都处于CLOSED状态,连接不存在也可以视为closed
TCP/IP协议 (史上最全讲解)_第41张图片

总结

TCP/IP协议 (史上最全讲解)_第42张图片

四次挥手

主动挥手的一方不一定是主动连接的一方
握手时必须双方同意,但是挥手可以是单方面的
TCP/IP协议 (史上最全讲解)_第43张图片
四次挥手的变形情况:
同时挥手不一定是实际意义上同一时刻,而是一方提出挥手,在另一方收到挥手信息之前也发出挥手的信息

TCP/IP协议 (史上最全讲解)_第44张图片
主动回收方:状态变化图中橙色线
被动挥手方:状态变化图中红色线
TCP/IP协议 (史上最全讲解)_第45张图片
变形情况状态位变化:
被动挥手方发既发了ACK也发了FIN,所以CLOSE_WAIT是短暂的,会马上变为LAST_ACK状态
TCP/IP协议 (史上最全讲解)_第46张图片

CLOSE_WAIT

出现在被动方:对方提分手,我还没有分手,单方面挥手

这种现象现象原因是没有正确关闭socket
TCP/IP协议 (史上最全讲解)_第47张图片

TIME_WAIT

不直接进入closed状态而是time_wait是因为可能发生超时重发现象,不能保证最后一次ack数据包一定发送给对方
TCP/IP协议 (史上最全讲解)_第48张图片
类似的现象:
TCP/IP协议 (史上最全讲解)_第49张图片

TIME_WAIT : 2msl

2*msl之后segment一定到达对方的时间一定够了
TCP/IP协议 (史上最全讲解)_第50张图片
网络编程设计主要是让客户端关闭连接
TCP/IP协议 (史上最全讲解)_第51张图片

2.6 TCP中异常情况

进程终止

进程是资源分配的最小单位(OS知道分配了什么资源给进程),即使强制关闭进程,没有在进程内部中关闭TCP连接,但是OS还是会正常释放资源,关闭TCP连接,可以看做是甲主动断开连接,正常四次挥手
TCP/IP协议 (史上最全讲解)_第52张图片

机器重启或关闭

点击重启或者关机还是会执行操作系统代码,会正常关闭所有进程和资源,正常的四次挥手。只要操作系统代码还能正常执行就可以正常关闭
TCP/IP协议 (史上最全讲解)_第53张图片

直接关闭电源

接收端认为连接还在,一旦接收端有写入操作,接收端发现连接已经不在了,就会进行reset。即使没有写入操作,TCP自己也内置了一个保活定时器,会定期询问对方是否还在。如果对方不在,也会把连接释放。
TCP/IP协议 (史上最全讲解)_第54张图片
接收端的状态:收不到确认应答,即使超时重传也收不到应答,接收端就会进行异常关闭流程
TCP/IP协议 (史上最全讲解)_第55张图片
发送端直接断电,到接收端异常断开TCP连接并不是瞬时的。如果接收端不写入数据,TCP中还存在一个保活定时器Keepalive来判断连接还是否存在。
TCP/IP协议 (史上最全讲解)_第56张图片

标志位RST

一般收到RST异常包就立即关闭连接,不会再进行四次挥手
TCP/IP协议 (史上最全讲解)_第57张图片

命令行查看主机TCP连接情况

netstat:查看网络状态
查看进程PID占用TCP哪一个端口
TCP/IP协议 (史上最全讲解)_第58张图片
过滤操作:
TCP/IP协议 (史上最全讲解)_第59张图片

2.7 TCP原理:流量控制Flow Control

TCP根据接收端接收数据的能力决定发送端的发送速度

接收端将自己接收缓冲区大小放入Segment Header中的16位窗口大小中发送给发送端

接收窗口=接收缓冲区大小-已用大小
TCP/IP协议 (史上最全讲解)_第60张图片
TCP/IP协议 (史上最全讲解)_第61张图片
三次握手阶段可以接收接收端的窗口大小
在这里插入图片描述
第一种情况:应用层写入多少数据就发送多少数据
第二种情况:只发送部分数据
TCP/IP协议 (史上最全讲解)_第62张图片
发送的数据不一定全部应答
过程中收到了对方的应答:发送且应答数据无需保留,可以视为可用空间
TCP/IP协议 (史上最全讲解)_第63张图片

2.8滑动窗口机制

对每一个发送的数据段,都要给一个ACK确认应答。收到ACK后再发送
下一个数据段。这样做有一个比较大的缺点,就是性能较差。尤其是数据往返的时间较长的时候。

2.8TCP原理:拥塞控制

在三次握手之后一定会受到接收端窗口大小
TCP/IP协议 (史上最全讲解)_第64张图片
应用层写入1500个单位大小数据
对方窗口大小为1000,发送端此时发送500个单位大小的数据给接收端:
接收端只应答了300个单位大小的数据,并返回900个单位大小的窗口,另外200个单位大小的数据可能被应用层读走。

此时滑动窗口大小发生改变:从300的起始位置,加上返回的窗口大小900,到达1200的位置,此次发送数据为900,图中剩余未应答200紫色部分的可能还在发送途中,这200的数据也包含在900中。

TCP/IP协议 (史上最全讲解)_第65张图片
此时应用层在写入300数据:并收到应答500,窗口大小为1000
可以看出滑动窗口左边界是根据ASN确定,右边界根据ASN+Window大小确定
TCP/IP协议 (史上最全讲解)_第66张图片

滑动窗口带来的好处

将多个发送数据的的等待回应时间重叠
TCP/IP协议 (史上最全讲解)_第67张图片

TCP/IP协议 (史上最全讲解)_第68张图片

总结

流量控制:TCP根据接收端处理数据的能力,来决定发送端发送数据的速度,这种机制就叫做流量控制

TCP/IP协议 (史上最全讲解)_第69张图片
TCP/IP协议 (史上最全讲解)_第70张图片
当拥塞窗口大于阈值之后,增长数量就从指数增长变为线性增长
TCP/IP协议 (史上最全讲解)_第71张图片
TCP/IP协议 (史上最全讲解)_第72张图片

2.9TCP小结

TCP三个特点:可靠,有连接,面向字节流(TCP是为了可靠性才放弃面向报文的特点)
TCP/IP协议 (史上最全讲解)_第73张图片
TCP Segment Header补充:
16位校验和:校验和不争取就直接把数据丢了,丢了不给应答,发送端还会重发数据过来
TCP/IP协议 (史上最全讲解)_第74张图片
三次握手———建立连接————四次挥手
状态是持续一段的时间,而不是一个时间点
TCP/IP协议 (史上最全讲解)_第75张图片
状态转移图:
TCP/IP协议 (史上最全讲解)_第76张图片
滑动窗口的变化条件:
TCP/IP协议 (史上最全讲解)_第77张图片
加速机制:当接收方不断发送相同ASN,说明这个数据一定丢失了,直接跳过超时等待时间,直接进行数据重发
TCP/IP协议 (史上最全讲解)_第78张图片
窗口探测:即使没有数据的发送,每隔一个定期的时间都会发送一个窗口探测
TCP/IP协议 (史上最全讲解)_第79张图片
延迟应答、捎带应答:
TCP/IP协议 (史上最全讲解)_第80张图片
TCP/IP协议 (史上最全讲解)_第81张图片

2.10UDP和TCP对比

UDP:业务对时间要求高,应用层不需要保证可靠性
TCP/IP协议 (史上最全讲解)_第82张图片
在UDP应用层抄袭TCP保证可靠性的机制
TCP/IP协议 (史上最全讲解)_第83张图片
常见协议:
TCP/IP协议 (史上最全讲解)_第84张图片

三、IP

3.1IP地址

IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。
TCP/IP协议 (史上最全讲解)_第85张图片
IP地址的组成:网络号+主机号
网络号:标识网段,保证相互连接的两个网段具有不同的标识
主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号

静态方式拆分网络地址:
TCP/IP协议 (史上最全讲解)_第86张图片
动态拆分IP地址:

子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。

/3表示32位子网掩码前三位是1,后面全是0
TCP/IP协议 (史上最全讲解)_第87张图片
ip地址&网络掩码=网络号
ip地址&(~网络掩码)取反操作=主机号
TCP/IP协议 (史上最全讲解)_第88张图片

特殊IP地址

将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有
主机发送数据包;
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),
对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通
信。
TCP/IP协议 (史上最全讲解)_第89张图片
内网和外网建立信道可以,但是外网向内网建立信道就不可行!

常见内网地址:
TCP/IP协议 (史上最全讲解)_第90张图片

3.2IP核心功能

TCP/IP协议 (史上最全讲解)_第91张图片
TCP/IP协议 (史上最全讲解)_第92张图片
路由表:将长期目标改为短期目标,路由表可以存在主机上也能存在路由器上
TCP/IP协议 (史上最全讲解)_第93张图片

3.3Header

4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。

4位头部长度(header length):IP头部的长度是多少个32bit,也就是 length 4 的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。用于解包。

8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。比如最小延时:数据直接发送

16位总长度(total length):IP数据报整体占多少个字节。

8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数。一般是64。每次经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。

8位协议:表示上层协议的类型。

16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏。

32位源地址和32位目标地址:表示发送端和接收端。

选项字段(不定长,最多40字节):略。
TCP/IP协议 (史上最全讲解)_第94张图片
TTL:即使形成环路,ip包也不可能无限循环传递下去,还会影响到上层传输层中MSL

16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。

3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1。类似于一个结束标记。

13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)
TCP/IP协议 (史上最全讲解)_第95张图片

3.4IP包解析

version=4 ip协议版本为ipv4
identification:0x003b 16位标识符,如果ip包分片的标识
time to live=128不同的OS有不同的寿命,使用ping命令
TCP/IP协议 (史上最全讲解)_第96张图片
tracert+ip地址,可以列出详细的经过的跃点ip地址
TCP/IP协议 (史上最全讲解)_第97张图片

3.5补充:数据链路层协议

MAC地址:用于标识网络设备的硬件物理地址
主机具有一个或多个网卡,路由器具有两个或两个以上网卡;其中每个网卡都有唯一的一个MAC地
址。
网络通信,即网络数据传输,本质上是网络硬件设备,将数据发送到网卡上,或从网卡接收数据。
硬件层面,只能基于MAC地址识别网络设备的网络物理地址。
TCP/IP协议 (史上最全讲解)_第98张图片
三个路由器连接两个局域网。根据源ip地址和目标ip地址,第一个路由器根据路由表换算出短期目标源mac1地址,目标mac2地址,上层协议:IP协议,这是在物理介质上传输。
TCP/IP协议 (史上最全讲解)_第99张图片

特殊MAC地址

广播数据报:发送一个广播数据报,表示对同网段所有主机发送数据报。广播数据报的MAC地址为:
FF:FF:FF:FF:FF:FF

3.6IP地址换算mac地址

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系
arp -a命令查看同一局域网内其它mac地址
TCP/IP协议 (史上最全讲解)_第100张图片
TCP/IP协议 (史上最全讲解)_第101张图片

四、补充知识点

4.1 TCP长连接翻译服务

此时应用层写入"apple"封装到TCP中
传输层:添加序列号,源端口,目标端口
网络层:ip地址
数据链路层:mac地址
以上封装为一个以太网帧,网卡经过传输介质(物理介质)发送到局域网的路由器,路由器
TCP/IP协议 (史上最全讲解)_第102张图片

4.2 应用层DNS协议

TCP/IP中使用IP地址来确定网络上的一台主机,但是IP地址不方便记忆,且不能表达地址组织信息,于是人们发明了域名,并通过域名系统来映射域名和IP地址。
TCP/IP协议 (史上最全讲解)_第103张图片

4.3 NAT协议

没有严格层次划分,不同的内网可以有相同的ip地址,但是相同ip地址发数据到公网,ip地址必须唯一,此时就需要NAT协议将网络地址转换。
在这里插入图片描述
内网ip地址不可以上公网
NAT职责就是将内网的IP地址和端口映射成为公网IP和公网端口,NAT内部记录这个映射关系。
TCP/IP协议 (史上最全讲解)_第104张图片

4.4 MTU

数据链路层对一次数据发送大小的限制
TCP/IP协议 (史上最全讲解)_第105张图片

五、练习

TCP/IP协议 (史上最全讲解)_第106张图片
TIME_WAIT是四次挥手的状态
TCP/IP协议 (史上最全讲解)_第107张图片
TCP/IP协议 (史上最全讲解)_第108张图片
TCP/IP协议 (史上最全讲解)_第109张图片
TCP/IP协议 (史上最全讲解)_第110张图片
TCP/IP协议 (史上最全讲解)_第111张图片
TCP/IP协议 (史上最全讲解)_第112张图片
TCP/IP协议 (史上最全讲解)_第113张图片

你可能感兴趣的:(tcp/ip,udp,网络)