码迷,mamicode.com
首页 > 其他好文 > 详细

TCP/IP 总结

时间:2018-02-16 10:17:49      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:定时器   上层   重复   检验   log   握手   ack   连续   数据   

  • TCP/IP协议族体系结构和主要协议

技术分享图片

下层协议通过封装为上层协议提供相应的接口,通过头部信息中的类型字段实现分用。‘

 

  • ARP协议工作原理

   主机向自己所在的网络广播一个ARP请求,目标地址会回应一个ARP应答,包含自己的物理地址。对于经常访问或最近访问的IP会放入ARP高速缓存。

  • ICMP:

  一类是差错报文,用来回应网络错误。一类是查询报文,用来查询网络信息。

  ICMP重定向报文:断定引起重定向的IP数据报应该使用哪个路由器来转发,并且以此来更新路由表。

 

  • IPV4头部信息

技术分享图片f

头部长度:有几个32bit,4位最多表示15,所以头部最多是60.

标识:同一个数据报的所有分片的标识相同。

片偏移:分片相对于原始IP数据报的开始。

头部校验和:CRC检验IP头部是否损坏。

 

  • IP模块工作流程
  1. 对头部做CRC校验。
  2. 查看是否设置了源站路选项(如果是则调用数据报转发子模块来处理)
  3. 查看是否发送给本机(是,选择上一层分用的协议。否,调用数据报转发子模块处理)

 

  • TCP协议
  • 特点:面向连接,字节流,可靠传输。(tcp连接是全双工的)

 

  • TCP头部信息

技术分享图片

32位序号:初始化为ISN,后续的序号为ISN+携带数据第一个字节的偏移

32位确认号:基于TCP的可靠链接,每次收到数据都需要确认。

4位头部长度:最大15个4字节,也就是60

6位标识:

  URG:紧急指针是否有效。

  ACK:携带ACK的保文为确认报文

  PSH:接收端应立即从缓冲区读走数据

  RST:复位报文

  SYN:同步报文(请求连接)

  FIN:结束报文段

窗口大小:缓冲区还能容纳多少字节的数据。

选项:

  kind=2 最大报文段长度选项一般是1460(1500 - 40)

  kind=3 窗口扩大因子(只能出现在同步报文中)

  kind=4 选择性确认

  kind=5 是kind=4的补充,标记了不连续的数据块

  kind=8 精确计算通信双方的回路时间。

 

  • TCP三次握手

技术分享图片

  • 连接超时

具有相同的序号值,发送的时间间隔:1s 2s 4s 8s 16s五次重传,全部失败后放弃连接并通知。

 

  • TCP四次挥手

技术分享图片

  • TCP状态转移图

技术分享图片

  • connect失败原因:
    1. connect的目标端口不存在
    2. connect在超时时间内未收到服务器的确认报文
  • TIME_WAIT状态
    1. 可靠终止TCP连接
    2. 保证让迟来的TCP报文有足够的时间被识别并丢弃(2*MSL)
  • 复位报文段
    1. 访问不存在的端口

    2. 异常终止链接(SO_LINGER)
    3. 处理半打开连接
  • 延迟确认(服务器端)

不马上确认上次收到的数据,在一段延迟后查看是否有数据要发送,与确认报文一起发送,减少TCP报文的数量。

  • 超时重传

与连接超时一样,一共执行5次,五次均失败的情况下有ARP和IP接管(发送广播查询ip)。

 

  • 拥塞控制

SWND(一次性写入的数据)太小,会导致网络延迟。太大,会导致网络拥塞,频繁丢包。

判断拥塞发生的方法:

  1. 传输超时(TCP重传定时器溢出)

  2. 接收到重复的确认报文段

慢启动和拥塞避免(通过RTT时间判断):CWND从1开始以次方的方式增加,知道达到ssthresh的值,每次收到确认加一。一旦发生拥塞,ssthresh的值减半,CWND重新从1开始次方增加。

快速重传和快速恢复(每收到一个无序报文就立即发出重新确认):快重传因为收到了三个重新确认报文,则不必等他超时。快速恢复时ssthresh减半,CWND减半并每次收到确认后加1。

 

 

TCP/IP 总结

标签:定时器   上层   重复   检验   log   握手   ack   连续   数据   

原文地址:https://www.cnblogs.com/zhangtiezi/p/8449385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!