在发送方想要发送数据的时候,由于应用程序的数据大小、类型都是不可预估的,所以TCP提供了缓冲机制来处理这些数据 。
在发送少量数据时,协议通常会延迟发送数据的时间,已缓冲到更多的用户数据后,组成一个合适大小的报文段再发送出去 。
对于每个发送出去的报文,TCP也不会马上删除他们,而是将他们保存在缓冲区中,以便超时时重传,收到ACK时才删除 。
接收缓冲:
报文到达时,可能是乱序的,也可能因为应用层来不及处理,需要缓存起来,这些数据就能先保存到接收缓冲区 。
12.3.5 拥塞控制如果一个主机还是以很大的流量给另一个主机发送数据,但是其中间的路由器通道很小,无法承受这样大的数据流量的时候,就会导致拥塞的发生,而拥塞控制考虑的就是网络的传输状况 。
通常在路由器发送拥塞时,它会丢弃掉不能处理的数据报,这将导致发送方因接收不到确认而重传,重传的数据同样不会成功,且重传会使得路由器中拥塞更为严重 。
拥塞发生时报文被丢弃,但是发送方不会得到任何报文丢失的信息,因此,发送方必须实现一种自适应机制,及时检测网络中的拥塞状况,自动调节数据的发送速度,这样才能提高数据发送的成功率 。
在TCP中,引进了一个名为拥塞窗口的概念,与滑动窗口相似,拥塞窗口也是发送方控制数据发送速度的方式之一 。
12.3.6 基于字节流tcp是面向字节流的,数据间没有明显的间隔 。
12.3.7 其它机制糊涂窗口避免、零窗口探查、连接保活等 。
12.4 TCP报文12.4.1 TCP报文段封装
文章插图
12.4.2 TCP报文段格式
文章插图
- 端口号 :每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程 。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接 。
- socket :包含客户 IP 地址、客户端口号、服务器 IP 地址和服务器端口号的四元组 。
- 序号 :用于对字节流进行编号 。
- 例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401 。
- 确认号 :期望收到的下一个报文段的序号 。
- 例如B正确收到A发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此B期望下一个报文段的序号为 701,B发送给A的确认报文段中确认号就为 701 。
- 数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度 。单位:字 。
- URG :紧急(The urgent pointer) 标志置位 。只有当 URG 标志置1时紧急指针才有效 。
- ACK :确认标志 。当 ACK=1 时确认号字段有效,否则无效 。
- TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1 。
- PSH :推标志 。该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理 。
经验总结扩展阅读
- 哪个星座是是天蝎座的情劫
- 水表最后一位红色是1吨还是0.1吨
- 龙舌兰酒为什么不能直接喝
- 长虫是什么动物
- 烈火军校董小姐扮演者是谁?
- 牛仔裤38码是多少尺?
- 小丑女的电影是哪一个?
- 唐艺昕演的穿越剧叫什么名字?
- 霉茶叶有什么用途
- bollycon是哪个国家的美瞳品牌?