TCP 基本概念

Posted ts65214

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP 基本概念相关的知识,希望对你有一定的参考价值。

ip协议不可靠,会丢失、出错、乱序         延迟、重复

 

tcp可靠性是指数据的可靠传递,或故障的可靠通知

tcp为保证可靠性,使用了带重传的正面确认技术

1.发送端需要知道接收端有没有收到段,接收端需要返回ack

2.超时未收到ack就重传,重传会导致段重复,序号可以识别重复的段

3.停等式发一个确认一个太慢,使用滑动窗口可以批量发送批量接收,

   此时需要知道ack确认的是哪个段,通过序号可以指明ack所确认的段。

4.报文如果能在网络中永久存在,发送端需要永久维护所有连接所使用过的所有序号,

   难以实现。

5.所以对报文添加跳数限制(最大255)

   并认为经过最大报文生存时间(MSLmaximum segment lifetime)后,

   某个段和它的ack已经不存在了。

   发送端需要保证序号在MSL秒内不会重复。InternetMSL120秒或30

 

 

解决丢失:确认超时后重传,即自动重复请求(ARQAutomatic Repeat reQuest)

解决重复:序号

解决乱序:序号

差错控制:校验码

多路复用:发送端的传输层从不同套接字中收集数据块,添加首部生成报文段,传给网络层

多路分解:接收端的传输层根据报文段中的首部,将数据交付给正确的套接字

流量控制: 应用程序从接收缓存里读取数据比发送端发送数据慢,接收缓存就可能溢出。

     接收方返回愿意接收的字节数量(称为通告窗口),发送方改变滑动窗口大小

     当接收方返回愿意接收的字节数量为0时:

接收方有缓存空间时向发送方发送新的窗口大小,窗口通告可能会丢失造成死锁

发送方可以发送1字节的报文段,强制接收方宣告窗口大小,这被称为窗口探测

 

 

发送端不一定要立即发送应用程序发来的数据,而是可以将数据缓冲起来

接收方也不一定要尽可能快的发送确认段

使用ssh时,每发送一个字节、确认字节、窗口更新、字符回显,都需要大量额外的报文首部,

许多tcp实现采用了延迟确认方法,将确认和窗口更新延迟50毫秒,希望能搭载更多的数据

Nagle方法:在下一个确认到来前,将要发送的数据缓存起来,确认到达后再发送数据

Nagle有时会造成短暂的死锁,即发送方等待确认以便发送更多的数据,

而接收方等待上层数据到来以便捎带确认

有些时候(例如游戏)可以用TCP_NODELAY选项禁用Nagle

低能窗口综合症:接收端缓冲区满,应用程序每次从缓冲区取走一个字节,

接收端向发送端宣告一字节的可用窗口,发送端发送一字节,

接收端缓冲区又满了,不停的重复这种情况

Clark方法:接收端缓冲区的一半为空,或者能装下一个最大数据段时,

接收端才发送窗口更新段,

发送端的段超过接收端缓冲区的一半,或者超过最大数据段时,

发送端才发送数据

 

持续计时器:接收端窗口由0变为100,接收端更新窗口,但该报文段丢失了,

然后发送端和接收端都在等待对方的动作。当持续计时器超时后,

发送端发送一个探询消息,接收端告知窗口大小

保活计时器:有些tcp实现了保活计时器,连接空闲一段时间后,查看对方是否还在,不在就断开连接

 

序号:随机的 __u32 型整数,不会被攻击者猜到。

   序号s2=s1+k溢出后,内核判断s1<s2return (__s32)(s1-s2) < 0;

   __s32是有符号整型,这里假设增量k<2^(n-1)-1

 

捎带:把对流的控制信息放到传送数据的数据报中。

 

端点(endpoint)(host, port),例如(192.168.250.2508080)

TCP连接由一对端点来标志

 

TCP是全双工的,两端都有自己的发送窗口和接收窗口,一个连接有4个窗口

 

最大传输单元(Maximum Transmission UnitMTU),链路层帧的最大长度,通常为1500字节,

有多种发现路径MTU并以此设置MSS的方法。

最大报文段长度(Maximum Segment SizeMSS)MTU减去TCPIP首部(通常40字节)

通常为1460字节

 

以上是关于TCP 基本概念的主要内容,如果未能解决你的问题,请参考以下文章

TCP 基本概念

TCP 基本概念

TCP/IP的基本概念知识

测试的一些基本概念知识(TCP )

iSCSI的一些基本概念

教程1:IP地址和路由基本概念