TCP-UDP协议
TCP/IP协议簇
-
四层模型
-
应用层
- HTTP/FTP等
-
传输层
- TCP/UDP等
-
网络层
- ICMP协议
- ICMP协议其实也算是IP协议的补充,ICMP协议是为了辅助IP协议,交换各种各样的控制信息而被制造出来的。主要用于传输出错报告控制信息。
- IP协议
- IP协议是无状态,无连接,不可靠的,这也让其相互独立更加便于通信。
- IP分片,在IP通信过程中有数据传输大小的限制,最多为65535个字节,但是限制与MTU限制,可能只有1500个字节,如果大于1500个字节就要进行数据的分片处理,对于多分片,每次分片都有自己的偏移值,除最后一个外,其他都有MF标志,传到主机后,主机会根据协议进行数据重组。
- TTL(Time to live):常见设置为64,是数据达到目的并允许经过的路由器级数,每经过一个路由就减1,若为0就舍弃此消息,防止路由循环。
- IP寻址和路由:IP在收到传输层传过来的数据,首先查看要传输的目的地IP是不是在同一网段,若在就交给数据链路层去做,若不在就要将数据给到路由,让路由再去按相同方式继续查找,直到最终找到结束。
- IP主要作用为寻址和路由,分片和重组。
- ICMP协议
-
数据链路层
- ARP协议
- ARP协议主要作用就是通过IP地址找到对应的设备MAC地址,ARP在收到IP老大哥的命令会去ARP缓存表里查看目标地址对应的MAC地址,若没有找到就广播一下,找到对应的MAC地址,然后将数据打包好给对应的设备。
- ARP协议
-
TCP协议
TCP传输控制协议是一种面向连接的,可靠的,基于字节流的传输层通信协议
-
TCP三次握手连接
- 客户端发送SYN到服务器
- 服务端接收到SYN,发送ACK,SYN到客户端
- 客户端接收到服务端数据,发送确认ACK到服务端,客户端进入ESTABLISHED状态,服务端收到确认也进入ESTABLISHED状态
-
TCP连接为何3次不用2次
- 主要是为了防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误,如:客户端发送一条连接请求因网络问题滞留时间长并未丢弃,而客户端以为服务器没收到,又发了一条,连接建立成功,数据发送完毕之后断开,此时那条消息到达服务器,本来是失效的,但是两次握手的机制就会让客户端服务器再次建立连接,浪费资源。
-
TCP四次挥手断开连接
- 客户端发出连接释放报文FIN到服务端(客户端FIN_WAIT1)
- 服务端收到客户端发来的连接释放报文,发送确认包到客户端(客户端FIN_WAIT2)
- 服务端将未发送的数据都发送完毕之后,发送连接释放报文FIN到客户端
- 客户端接收到服务端的释放连接报文,发送确认包到服务端,进入TIME_WAIT状态,服务端收到应答立马关闭连接
-
TCP连接三次握手为何断开要四次挥手
- 在建立连接时,SYN和ACK可以一同发送到客户端,而断开连接时,只是客户端不再发送数据了,但可以接收数据,服务端也不一定所有数据都已经传给对方,所以可以先把数据发完再去发送FIN报文,所以就多了一次。
-
TIME_WAIT状态
TCP协议规定,主动关闭连接的一方要处于TIME_WAIT状态,等待2*MSL(maximum segment lifetime)的时间后才能回到CLOSED状态。
-
可靠的终止TCP连接
-
保证让迟来的TCP报文段有足够的时间被识别和丢弃。
-
等待2*MSL的作用:
- 保证客户端的最后一个ACK报文到达服务器,假如此报文丢失,服务端又发来一个,等待时间内就可以再次将ACK发送到服务端,关闭连接。
- 防止已经失效的连接请求报文段,客户端发送最后一个确认报文后在这个2*MSL时间内所有产生的报文都从网络中消失。
-
如何解决让其不进入TIME_WAIT状态:
- 使用setsockopt()设置socket描述符的选项SO_REUSEADDR为1,表示允许创建端口号相同但IP地址不同的多个socket描述符。
-
-
流量控制
- TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制叫做流量控制
-
拥塞控制
-
四种方式:慢启动、拥塞避免,快重传,快回复
-
慢启动和拥塞避免:
- 在发送数据时不知道当前网络状态,先发送小部分数据试探,如果网络状态良好就指数级增长发送数据,但也不可以无限制指数增长下去,设置一个慢启动阈值,超过这个慢启动阈值,超过这阈值就不指数级增长而是拥塞避免,让其线性增长。
-
快重传和快恢复:
- 快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认,快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不能等待超时再重发。同时不进行慢启动,而是将发送量减半,进行拥塞避免算法,可以快速恢复原来的传输速率。
-