0%

网络tcp_udp协议

tcp

http封装

Ethernet2(以太网2帧头) | IPV4 | TCP | HTTP | FCS(以太网2帧尾)

tcp端口号

  1. 取值范围
    • 16bit 范围0-65535 0–2^16-1
    • 1-1023 知名端口
    • 1024-65535 非知名端口

tcp信道协议种类

  1. 单信道协议:一个应用程序对应一个端口
  2. 多信道协议:一个应用程序对应多个端口,比如ftp,tcp20(控制端口)和tcp21(数据端口)

tcp对带宽抢占率远低于udp

tcp头部封装

  1. tcp header 取值范围20Byte-60Byte。
  2. header length,因为长度可变,该字段告诉接受者tcp报头长度。
  3. Resv. 保留字段全部置0。
  4. 6个控制位,syn置1 则表示发送syn,也就是三次握手的第一个阶段。
  5. URG,服务器一对多处理报文的时候,如果tcp URG置为1,则优先对这些数据进行处理。
  6. 只有当需要对tcp启用高级功能的到时候,才需要添加options可选项
  7. padding是因为三层包头和四层包头大小都必须被4整除,所以当options选项被使用的时候,无法被4整除的时候,对padding进行用连续的0填充,填充到可以被4整除
  8. ergent pointer 紧急指针配合URG位,让多股tcp应用,哪一股被优先处理

三次握手

四次挥手

面向连接协议:

  1. 流量控制
    • 限速,(源末两端接受带宽不一致,如果源端带宽大,全速发送给接收端,则接收端会产生拥塞。) 在发送数据之前进行协商速率,通过windown字段(单位字节,Byte)进行协商,比如协商为100字节,则源端发送100字节数据给接收端,接收端收到后,返回一个确认给源端,如果没确认,则表示数据丢失,需要数据重传。窗口不是固定不变,在每次发送流量之前都会进行windown协商。
      带宽大的时候,窗口经过协商会变大,直到占用链路最大字节的时候,又会控制窗口大小,防止拥塞发生,这种行为称之为滑动窗口。
    • tcp延迟启动(slow start) 第一次协商为1 字节, 第二次为2字节 第n次为2^(n-1)次方,(下载的时候先比较小,然后逐渐变大)
    • 全局同步问题:slow start 窗口逐渐变大,当超出阈值带宽的时候,会减半,然后又逐渐变大,触发阈值再减半,依次循环。其带宽利用是一个折线。平均带宽利用不会百分百打满。当存在大量tcp应用的时候,此时这些应用一起发送数据的时候,就会出现全局同步的问题,大家都在利用带宽,发现不足了,瞬间减半窗口。
    • 滑动窗口的协商发生在接收方回复syn-ack的时候。
  2. 防乱序
    • 处理延迟,串行化延迟,传输延迟,队列延迟
    • 队列延迟,导致源给目的地发送多个数据,导致乱序—-抖动。
    • 通过squence number来标记数据包,进行顺序接受。
  3. 防丢包
    • acknowlegde number中包含一个确认号,确认号的值通常为发送方发送的最大序列号值加1。比如发送方发送 1 2 3 ,则接收方发送确认号4,发送方知道4后,接着发送4 5 6。如果接收方只收到了4 5 ,则其返回确认号为6,那么发送方发现接收方漏了6,则对6进行重发。 如果发送方只收到了4,返回了确认号5, 那么发送方会对 5 6 都重发。
  4. 完整性检查
    • 根据接收到的数据跟tcp中的checksum字段比较。因为并不是HMAC的方式,所以无法检测数据是否被篡改,只能检测流量在发送的时候是否因为拥塞导致冲突。
  5. 数据重传
    • 根据发送方发来的确认号,以及发送过去的序列号,对比查看是否需要重传。

tcp注意点

  1. tcp只支持单播(unicast)数据的发送,如果用了tcp,则无法组播或者广播。相对udp不够灵活,udp支持单播 组播 广播。

  2. 完全连接,完成三次握手。

  3. 半开连接,发送端未发送最后一次ack的连接,接收端不会自动断开,会默认被保持,且消耗服务器内存和cpu。

udp

面向无连接,不可靠传输

封装

ip header | udp header | data

udp头部报文

  1. udp头部占用8字节,传输时候没有确认机制。

  2. udp主持组播和广播

  3. 媒体流量基本用udp封装,所以媒体对序列的要求,则封装一个rtp(实时传输协议)的包头,其squence 为12字节,保证源末报文可以根据序列进行重组。 ethernet2 | udp | rtp | VoIP | FCS

tcp udp对比

  1. 可靠 tcp强
  2. 安全 udp强 tcp 三次握手容易被攻击
  3. 带宽利用 udp利用高 tcp存在全局同步的问题,解决办法 QoS WRED加权随机早期检测
  4. 应用灵活 tcp只支持单播,udp更加灵活
  5. 不用支持重传的服务 VoIP 用udp
坚持原创技术分享,您的支持将鼓励我继续创作!