4-传输层
传输层
ip帮我们找到子网,mac帮我们找到主机,而具体使用的是应用程序,位于os之上,需要标识应用程序的机制---端口
传输层的功能:建立端口到端口的通信,端对端。
编程时使用的是传输层提供的接口进行编程,是用户接触到的最底层

因为网络层已经解决了路由问题

实际使用时,浏览器和网站后台都是进程,可以看成进程间通信
传输层解决的就是跨网跨设备的进程通信



udp十分简单,没有对数据进行分割与合并等。

特点:
1-udp是无连接协议。例如打电话之前,拨打电话号相当于建立链接的过程,电话接通之后表示链接成功建立,链接成功后就可以开始通信了,挂电话相当于结束链接。
UDP无连接,指的是想法数据就直接发出去了,不建立链接,相当于发短信。
2-不能保证可靠的交互数据,想发就发,无法保证数据在网络中是否丢失,丢失了data也不会感知到。因为它的头部简单没有保证data必达的机制。
3-是面向报文传输的,报文就是数据报,应用层传来的完整数据,不做任何处理,直接塞进udp的数据里面发送出去。

4-没有拥塞控制,把网络看成公路网,车流量多的时候造成公路拥塞,网络同理,udp无法感知网络是否拥塞
TCP协议详解


特点:
1.tcp是面向连接的协议,需要通信必须先建立连接,打电话必须接通了才能通信。
2.tcp的一个连接有两端(点对点通信)
3.tcp提供可靠的传输服务
4.提供全双工的通信,端点可以同时进行通信
5.tcp是面向字节流的协议,udp是面向数据报
传输层的数据是应用层传来的,数据是一块一块的,tcp不把它看成一块完整的数据,而是看成一系列字节流
tcp不是面向一整块数据进行处理,而是面向字节一个个字节进行处理,所以tcp有可能是取出字节流中的一段进行传输
剩下的data用另一个tcp报文进行传输,所以tcp中可能对用户数据进行合并或者分拆

tcp协议头部如下,明显比udp的头部复杂的多

除了可选,tcp头部固定20字节
序号:共占32bit,4bytes,0-2^32-1,因为面向字节流,每个字节都有一个序号,用来标记传输的字节,一个字节一个序号
这里的序号用来标记这个tcp报文所传输数据的第一个字节序号是什么

确认号:0-2^32-1,也是一个字节一个序号,表示期望收到下一个数据的首字节序号
假设某计算机收到数据包的序号为501,数据的长度有100bytes,确认号会说我都收到了501-600,确认号601.此机制保证了tcp的完整性

![]()
数据偏移:表示真实数据距离首部的偏移,这是tcp可选项导致的


三次握手四次挥手tcp标记十分重要

窗口结合确认号进行运算,例如确认号为501,窗口值为1000,表示501-1500个字节 是可以接收的。
校验和与udp一样
紧急指针
当urg=1时才会启用,用来指定紧急数据在报文的位置
tcp选项,最多40bytes,用来支持协议未来的发展预留的空间
以上就是tcp头部的详细讲解,通过头部可以简单了解协议可以做一些什么工作
可靠传输的基本原理
涉及到一些算法,停止等待协议、连续arg协议





![]()
超时定时器


tcp流量控制
接收方希望发送方发送的慢一些,接收方无法一次接收太大流量
靠滑动窗口来实现流量控制
窗口:致命允许对方发送的数据量
假设确认号为501,窗口为1000,表示发送方可以发送501-1500,这1000个字节的数据
滑动窗口
假设发送发发送序列号为1的数据,假设发送了100字节
发送方还可以进行第二次发送,序列号为101,还是发送100字节
接收方收到200字节,回应ack=201,表示希望接收的下一个序列号,并添加一个数据,表示当前的窗口为300,表示还能发送300字节的数据
发送放收到后,seq=301又发送100字节,还能发200字节,继续seq=401,再发200字节
接收方收到后,回确认消息,ACK=1,ack=601,rwnd=0,告知发送方,收到300字节,且窗口为0,不能再发送数据了
可见接收方通过窗口,来告知发送方当前还能接收多少字节的数据,进而实现流量的控制

继续
接收方收到数据后,传递到应用层数据,一定时间后,又可以接收数据了。
接收方给发送方发rwnd=1000表示我还能收1000字节的数据,发送方收到后又可以封装数据继续发送。
假设接收方发送窗口大小的信息丢失了,发送方会一直等待,认为接收方窗口一直为0,接收方也会一直等待,所以双方都在等待造成死锁。
那么tcp不是可靠协议么?可靠指的是数据的可靠传输,指的是它的确认机制
对于特殊的消息,是没有超时重传机制的。
上述死锁如何解决呢? 坚持定时器
当接收窗口为0的时候,接收方启动坚持定时器
每隔一段时间发送一个窗口探测报文 ,用来询问接收方窗口是否增大
tcp协议的拥塞控制
网络比喻成公路,当网络数据报文过多,就会发生拥塞
数据从一个地方到另一个地方,中间会经过许多设备,数据链路中各个部分都有可能成为网络传输的瓶颈
流量控制考虑的是点对点的通信量的控制没利用窗口来实,
拥塞控制考虑的是整个网络,是全局性的考虑,是个很庞大的问题,很难有最优解,了解即可
报文超时认为是拥塞
tcp协议:
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
| 以太网头 | ip 头 | tcp头 | 数据 |
udp协议:
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
| 以太网头 | ip头 | udp头 | 数据 |
tcp三次握手和四次挥手


浙公网安备 33010602011771号