超硬核TCP、UDP基础知识汇总1

电子说

1.3w人已加入

描述

今天开始进行计算机网络相关的总结及细节剖析,将会对常考的相关知识进行更详细的解读,本章是TCP相关的,图文并茂,也是花了作者一个周末时间搞定的,欢迎大家点赞转发。

那就开始正文喽~

1、TCP主要特点

1.面向连接:

•TCP连接只能有两个端点,TCP连接是一对一的。

•TCP提供可靠连接服务。

•TCP提供全双工通信。

2.面向字节流:

•TCP和应用程序交互是一次一个数据块进行交互。但是TCP会把应用程序交下来的数据块看成一串无结构的字节流。

•TCP报文收发之间的数据块不一定相同(因为我不一定一次接受多少受网络情况,拥塞情况控制)但是字节流一定相同。

•TCP根据对方的接收能力和网络拥塞情况将字节流分成大小不同的段发送给接收缓存。

缓冲区

3.TCP的连接套接字连接两端的插口包含IP和端口号。全双工抽象连接。

2、TCP的报文格式

缓冲区

1.源端口,目的端口各占两个字节是运输层与应用层交互的接口。

2.序号(4B):seq,字节序号本报文段所携带数据的第一个字节的序号。

3.确认号(4B):ack,期望对方下次发来数据的第一个字节的序号。

4.数据偏移(4bit):标志着报文段数据部分起始位置距离报文段起始位置的距离即首部长度。

5.URG(1B),紧急位置1,立刻将TCP发送缓存中的字节流打包成报文发送出去。

6.ACK(1B),ACK = 1代表确认号有效。

7.PSH(1B),PSH = 1,接收方立刻将接收缓存数据上交给应用进程。

8.RST(1B),RST = 1,TCP连接中出现严重差错必须释放连接然后在重新建立运输连接。

9.SYN(1B),SYN = 1,表示这是一个连接请求或连接接受的报文。

10.FIN(1B),FIN = 1,用来释放一个连接。FIN为1表明报文段发送端已发送完成,并要求释放连接。

11.窗口(2B),告诉对方从确认号开始接收方目前允许对方发送的数据量。

12.检验和(2B),类似于UDP首部和数据这两部分计算时要在TCP报文段之前加上伪首部。

13.紧急指针,16位,当URG = 1时,这部分记录了紧急数据的大小把它放在数据部分的最前面发出去。

14.选项字段:长度可变最大报文段数据部分长度MSS,MSS告诉对方TCP我缓存最大能接受的长度为MSS。

MSS太大IP层分片只要有一片出错就得重传。

MSS太小效率低下。

15.其它选项:

窗口扩大选项:占3字节,其中一个字节S为窗口扩大的位数,比如(16+S)但是最大值不能超过30位

时间戳选项:

1.计算往返时延。

发送时打一个时间戳放在timestamp中,收到确认报文后再打一个时间戳此时将之前的timestamp中的时间放在timestamp echo中然后将收到确认报文的时间戳放在timestamp中二者相减可以得到RTT。

2.防止序号回绕。

由于序号编码空间是32位的所以一共是2的32次方。对于高带宽的网络很容易消耗完,也就是说接收方可能会收到两次相同序号的报文,如果不加标记,接收方会认为这两个报文是相同的然后就会丢弃。时间戳选项会将两个报文标记好时间戳这样接收方就不会丢弃了。

缓冲区

16.填充。

为了保证TCP首部是4字节的整数倍。

3、TCP的可靠传输

3.1、TCP连接的两个端点都有两个窗口:

发送窗口:准备发送的数据和已发送但未收到确认的数据。

接收窗口:按序接收但没有上交的数据,不按序接收的数据。

缓冲区

•P3 - P1 = A的发送窗口(又称为通知窗口)

•P2 - P1 = 已发送但尚未收到确认的字节数

•P3 - P2 = 允许发送但尚未发送的字节数(又称为可用窗口)

如图所示发送窗口按序发送窗口中的字节流,如果发送且收到确认则滑出窗口如果已发送但未收到确认则留在发送窗口中用来准备重传。

接收窗口将按序接收字节流如果收到的字节流无序则仍然会留在接收窗口中。比如我先收到了37则37不会被确认交付主机因为前面的34-36还没有被接收当前面的34-36被接收后34-37才会一起被交付主机。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分