本博客为本人自学后进行总结,内容如有错误敬请指出.
1.传输层的两兄弟

传输层最重要的两个协议是TCP和UDP, 也可以说是我们学习计算机网络的重中之重. 他们两个最重要的区别是, TCP是面向连接的, 而UDP是无连接的. 所以说TCP是可靠的,UDP是不可靠的.
2.常用的一些端口

3. UDP

应用层给予传输层的报文大小应该适中, 太小会造成报文头部信息远远大于数据信息, 造成浪费. 太大在底层分片时容易丢失, UDP又没有重传等机制, 造成效率低下.

首部字段共占八个字节,均等分为四个部分, 16位源端口号代表从哪里来, 16位目的端口号代表去哪里, 16位UDP长度代表UDP数据报的整个长度, 还有16位UDP检验和, 用于检验数据部分是否在传输部分出现了丢失或传错等情况.
如果找不到对应的端口号, 就丢弃报文,并给发送方发送ICMP"端口不可达"差错报告报文.
4. TCP

TCP之所以说是虚连接, 是因为没有物理上的连接, 而是逻辑上的连接.
与UDP不同的是, 面对从应用层传下来的报文时,TCP会将报文按字节编号, 每次发送若干个字节并附上头部, 而不是像UDP将整段报文一次性发送.

在上图中, 左方是报文发送方, 右方是报文接收方, 双方各有一个TCP缓存. 发出方缓存用来暂存将要发出的消息, 可以看到它其中的内容是按字节编号排号的.每次只会发送若干个报文, 并在前面加上TCP头. 接收方缓存用来暂存接收到的报文.下面我们可以看到TCP报文首部的格式.

TCP报文的固定首部总共包含20个字节,2个字节的源端口标识自己从哪来, 2个字节的目的端口标识自己去哪. 序号seq就是标识自己从哪个字节开始的. 确认号ack就是接收方期待接收的下一个字节的编号. 数据偏移用来规范化格式. 然后是六个标志位有重要的含义, 需要记住URG,ACK,SYN,FIN.分别表示紧急位, 确认位,同步位和终止位. 窗口用来进行流量控制时限制发送方的发送速率.检验和用来检验后面包含的数据部分有无在传输过程中被破坏. 紧急指针用于配合紧急位URG使用,使该报文优先发送.

三次握手:
有我们的客户端先发送一段报文, 该段报文SYN置1,表示要建立连接,并随机生成一个序列号seq=x
服务器接受到客户端发来的请求建立连接的报文后, 如果服务器同意建立连接. 就会发送一段回应报文,其中SYN=1,代表同意建立连接,ACK=1,代表确认号有效, 随机生成一个seq=y,ack为x+1, 并且服务器会为该TCP连接分配缓存和变量
客户端收到服务端的确认报文后,第三次握手,客户端为该TCP分配缓存和变量,ACK=1,seq=x+1,ack=y+1,并且这段报文可携带数据.
至此连接建立完成.
两次握手行不行?
不行,因为没有第三次握手的话服务器无法确认自己的消息是否能成功传达给客户端,如果不能的话,就会造成资源的浪费,因为对于客户端发来的消息如果不能进行有效的确认和重传, 数据很可能会出错, 就不能称之为靠谱的连接.
SYN洪范攻击
即客户端只向服务器发送第一次的请求建立指令, 对于接受到的回应不给予回复, 由于服务器已经为该TCP连接分配缓存和变量, 从而浪费服务器的资源, 如果有很多个这样的客户端, 服务器就会崩.

四次挥手(连接释放)
断开连接可以由任意一方发起,假设我i们由客户端发起.
1.客户端发送连接释放报文段,制动关闭TCP连接, FIN=1,seq=u
2.服务器回送一个确认报文段,客户端到服务器这个方向的连接就释放了–半关闭状态.ACK=1,seq=w,ack=u+1
3.服务器端发送完数据,就发出连接释放报文段,主动关闭TCP连接.FIN=1,ACK=1,seq=w,ack=u+1
4.客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL(最长报文段寿命)后,连接关闭.ACK=1,seq=u+1,ack=w+1
为什么要等待2MSL呢, 因为如果客户最后发送的ACK语句服务器端没有收到的话,服务器就会重发第三条语句, 在2MSL时间内客户就会收到. 否则服务器就会一直发第三条语句,造成资源的浪费.
5.TCP的可靠传输机制

TCP的可靠传输主要靠四步保证.校验,序号,确认,重传
可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的.

TCP报文中的序号字段指的是一个报文段第一个字节的序号,表示自己这份报文是从哪个字节开始的,如上图蓝色部分序号为1,黄色部分序号为4等等, 接收方可以根据此知晓这份数据报是否是自己想要的.

确认机制的作用,让发送方知道接收方已经完整的接受到了报文段, 从而可以将已经确认接受的报文段从发送方的缓存中删去.
接收方会在合适的时候发送一个确认报文段, 只用来确认.
接收方也可以在自己有信息要发送的时候,捎带上这个确认报文段,就是捎带确认.
这个确认报文段首部的确认号字段为希望收到的字节编号n, 当发送方接受到这样一个确认报文段时, 就会知道n-1个字节已经成功发送并接受了, 接下来就会发送以第n个字节开头的报文段,并将前面n-1个字节的报文段从发送缓存中删除

6. TCP的流量控制


本文主要探讨计算机网络传输层的两大协议——TCP和UDP。TCP是面向连接的,提供可靠的传输,通过三次握手建立连接,而UDP则是无连接的,不可靠但高效。此外,文中还介绍了TCP的可靠传输机制、流量控制以及四次挥手的连接释放过程。
484

被折叠的 条评论
为什么被折叠?



