传输层负责数据能够从发送端传输接收端.
再谈端口号
端口号标识了一个主机上进行通信的不同程序.端口号的划分为两个范围,0-1023为知名端口号,是操作系统留给广为流传的应用所使用的,1024-65535是操作系统动态分配的端口号.客⼾端程序的端口号,就是由操作系统从这个范围分配的.
UDP协议
UDP协议端格式 
16位源端口号:发送方的端口号.
16位目的端口号:接收方的端口号.
16位UDP长度:整个UDP报的长度标识,单位:字节,因为只有16比特位,因此一个UDP报最大传输的信息量为64KB.
16位UDP校验和:用户验证数据报内容是否正确,如果验证和出错则丢去数据报.
//验证数据在传输过程中是否正确,只能确定数据是错的,不能准确确定数据是正确的(实践中近似认为,校验和正确,数据正确)
UDP的特点
无连接:不需要与通信方建立链接,只需要知道对端的IP与端口就能进行传输.
不可靠:没有确认机制,没有重传机制,如果发生网络故障,信息没有正确发送给对方,UDP协议层不会给应用层返回任何错误信息.
面向数据报:不能灵活的控制读写数据的内容和次数.
//无论应用层交给UDP多长的报文,UDP都会照样发送,不会进行拆分和合并.
UDP使用注意事项
UDP报的最大长度是有限的,其容量64KB在今下的互联网上是一个非常小的数字,在使用UDP进行传输大数据时,需要在发送方的应用层手动拆分数据,在接收方的应用层手动合并数据.
TCP协议
TCP协议段格式

源/目的端口号:标识发送/接收方的端口号.
32位序列号/32位确认号:后续补充.
4位首部长度:表示首部长度,单位:32bit/4B,TCP首部最大长度为15*4=60B.
保留位:目前没有实际用处,预留给后续需要拓展时使用.
6个标志位:
URG:紧急指针是否有效.
ACK:确认号是否有效,应答报文的ACK为1.
PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走.
RST:对方要求重新建立链接,把RST标识的称为复位报⽂段.
SYN:请求建立链接,把SYN标识的称为同步报文段.
FIN:通知对方本段要关闭了,把FIN标识的称为结束报文段.
16位窗口大小:后续补充.
16位校验和:校验数据准确性.
16位紧急指针:标识那部分信息是紧急数据.
头部选项:后续补充.
TCP的特点
面向连接:在数据传输前,TCP需要建立连接,传输完成后再断开连接.
可靠:TCP通过多种机制(如确认应答,超时重传,错误检测等)确保数据无差错,不丢失,不重复地传输到接收方,并且保证数据的接收顺序与发送顺序一致.
面向字节流:TCP以字节流的形式传输数据,应用层的数据被分割成适合网络传输的小块后发送,接收方再将其重新组装.
确认应答
TCP的确认应答是确保TCP可靠性最核心的机制.

TCP将每个字节的数据都进行了编号,即为序列号.每一个ACK都带有对应的确认序列号,确认序列号为接收到的最后一个数据的编号+1,确认序列号负责告诉发送者已收到信息,下次信息从确认序列号开始进行发送.
超时重传

主机A发送数据给B之后,可能因为⽹络拥堵等原因,数据⽆法到达主机B.
如果主机A在⼀个特定时间间隔内没有收到B发来的确认应答,就会进⾏重发.
再者,如果主机B接收到了数据,但是ACK丢包了,那么A也会重新发送数据,主机B就要对数据进行去重.TCP协议使用序列号来打到去重的效果.
去重过程:
1.如果数据依旧存留在TCP的接收缓冲区中,没有被应用层读走.那么用新接收的序列号与签名的序列号进行比较,如果找到相同的序列号则抛弃重复数据.
2.如果数据已经被应用层读走了,socket api是可以记录最后一次读取的数列号是多少,同时数据的读取是从序列号小的开始,如果新接收的数据的序列号小于记录的序列号,则新接收的数据是重复数据直接抛弃.
超时时间的确定:
最理想的情况下,找到⼀个最小的时间,保证"确认应答⼀定能在这个时间内返回".
但是这个时间的长短是随着网络的质量变化的.如果超时时间设的太长,那么会影响数据的传输效率,如果超时时间设置的太短,就可能会让重传频繁发生.
TCP为了保证无论在什么网络下都能进行高性能的通信,因此会动态计算这个超时时间,重传次数越多,超时时间越长,当重传次数打到一定数量后,TCP认为网络或对端出现异常,强制断开链接.

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



