TCP&UDP

147 阅读6分钟

TCP/IP协议族

四层网络模型: 应用层 传输层 网络层 数据链路层

应用层: HTTP/FTP等

传输层: TCP/UDP协议

网络层: IP协议 ICMP协议

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主要作用为寻址和路由,分片和重组。

数据链路层: ARP协议

ARP协议: ARP协议主要作用就是通过IP地址找到对应的设备MAC地址,ARP在收到IP老大哥的命令会去ARP缓存表里查看目标地址对应的MAC 地址,若没找到就广播室广播一下,找到对应MAC地址,然后将数据打包好给对应的设备。

TCP IP ARP协议关系可以看这篇文章,通俗易懂,地址:www.cnblogs.com/itsad/p/825…

TCP协议: TCP传输控制协议是一种面向连接的,可靠的,基于字节流的传输层通信协议。

TCP三次握手连接: 1,客户端发送SYN到服务器 2,服务器接收到SYN,发送ACK,SYN到客户端 3,客户端接收到服务端数据,发送确认ACK到服务端,客户端进入ESTABLISHED状态,服务端接收到确认也进入ESTABLISHED状态

TCP连接为何3次不用2次: 主要是为了防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误,如客户端发送一条连接请求因网络问题滞留时间长 并未丢失,而客户端以为服务器没收到,又发了一条,连接建立成功,数据发送完毕后断开,此时那条消息到达服务器,本来是失效 的,但是两次握手的机制就会让客户端服务器再次建立连接,浪费资源。

TCP连接为何3次不用4次: 3次能做到的事,干嘛还要用4次呢,哈哈。

TCP四次挥手断开连接: 1,客户端发出连接释放报文FIN到服务端(客户端FIN_WAIT1) 2,服务端收到客户端发来的连接释放报文,发送确认包到客户端(客户端FIN_WAIT2) 3,服务端将未发送的数据都发送完毕后,发送连接释放报文FIN到客户端. 4,客户端接收到服务端的释放连接报文,发送确认包到服务端,进入TIME_WAIT状态,服务端收到应答立马关闭此连接。

TCP连接三次握手为何断开要四次挥手: 在建立连接时,SYN和ACK可以一同发送到客户端,而断开连接时,只是客户端不再发送数据了,但还可以接收数据,服务端也不一定 所有数据都已经传给对方,所以可以先把数据发完再去发送FIN报文,故就多了一次。

TIME_WAIT状态: TCP协议规定,主动关闭连接的一方要处于TIME_ WAIT状态,等待2*MSL(maximum segment lifetime)的时间后才能回到CLOSED状态。 1,可靠的终止TCP连接 2,保证让迟来的TCP报文段有足够的时间被识别和丢弃。

  等待 2*MSL的作用:
  	1,保证客户端发送的最后一个ACK报文到达服务器,假如此报文丢失,服务端又发来一个,等待时间内就可以再次将ACK
  	发送到服务端,关闭连接。
  	2,防止已经失效的连接请求报文段,客户端发送最后一个确认报文后在这个2MSL时间内所有产生的报文都从网络中消失

  如何解决让其不进入TIME_WAIT状态:
  	使用setsockopt()设置socket描述符的选项SO_REUSEADDR为1, 表示允许创建端口号相同但IP地址不同的多个socket描述符.

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

拥塞控制:(资料参考:www.cnblogs.com/losbyday/p/… 四种方式:慢启动,拥塞避免,快重传,快恢复。

  慢启动和拥塞避免:
  	在发送数据时不知道当前网络状态,先发送小部分数据试探,如果网络状态良好就指数级增加发送数据,但也不可以无限制
  	指数增长下去啊,设置一个慢启动阈值,超过这阈值就不指数级增长而是拥塞避免,让其线性增长。

  快重传和快恢复:
  	 快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认,快重传算法还规定,发送方只要一连收到三个
  	重复确认就应当立即重传对方尚未收到的报文段,而不用等待超时再重发。同时不进行慢启动,而是将发送量减半,进行
  	拥塞避免算法,可以快速恢复原来的传输速率。	

UDP协议: UDP用户数据报协议是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

UDP协议对比TCP优势: 1,UDP无连接,不存在连接时延和维护连接的开销。 2,UDP没有拥塞控制,实时性好。 3,UDP面向报文,无需考虑粘包等问题。

UDP,广播,多播,单播。