网络编程(2):TCP、UDP协议详解
来源:互联网 发布:水电费软件 编辑:程序博客网 时间:2024/06/07 06:19
- UDP协议
- UDP Header、UDP伪 header、校验和
- UDP协议特点:差错检测
- IP分组与重组
- TCP协议
- TCP Header
- TCP协议特点
- 差错检测
- 差错纠正
- 队列管理
- 重复消除
- 流量控制
- 拥塞控制
- TCP生命周期器
- TCP三次握手连接(三次握手)
- TCP四个握手断开连接(四次分手)
- TCP数据传输
1、UDP协议
UDP是面向无连接、不可靠的传输层协议,它本质上就是在IP协议上添加了差错检测、超时重传、IP分组与重组等轻量级的功能组成的。
它的传输速度十分快,但不考虑网络的状态与对其他用户网络的消极影响。但它也非常适合应用于实时要求高的场景。
它是面向无连接的、不可靠的,因为数据报文是直接发送,并且不关心是否发送成功,而接收端则关心是否能收到数据包和数据报文正确与否。
1.1、UDP头、UDP伪头、校验和
UDP头 & UDP伪头:
UDP头的定义如下结构:
UDP Header一共8个字节,也比较简单。因为是传输层是面向端口传输编程,所以头里面有源端口号、目的端口号用于表明是哪个程序在收发。
UDP头 & UDP伪头的结构:
伪头的作用只是仅仅是用户校验和的的计算,实际上不传送出去(传送到别的层),让UDP层能验证数据是否正确到达目的地。
校验和:
发送方通过UDP头和UDP伪头生成校验和,接收方通过同样的数据生成校验和,通过比对两个校验和是否一致,可得出是否发生传输错误。
若发生传输错误,则舍弃整个报文,或者发起重启。
1.2、差错检测
UDP Header具备一个UDP校验和,通过校验和可以得知数据是否正确地传输,这就是UDP的差错检测。
NOTE:
校验和在IPV4是默认开启,但可关闭。
校验和在IPV6中是强制开启。
1.3、IP分组与重组
当报文超过数据链路层的MTU(max transfer unit)时,会将报文切分层若干IP报文发送,然后在接收端进行重组。而且只有一个IP报文会有UDP头。
重组失败的情况:
在IP层,当收到第一个UDP IP报文后,系统会启动计时器,若在计时器设定的时间内,都没有接收完完整的UDP报文,那么就会UDP重组失败。
2、TCP协议
{
- TCP协议
- TCP Header
- TCP协议特点
- 差错检测
- 差错纠正
- 队列管理
- 重复消除
- 流量控制
- 拥塞控制
- TCP生命周期器
- TCP三次握手连接(三次握手)
- TCP四个握手断开连接(四次分手)
- TCP数据传输
}
TCP协议是面向连接、可靠的单播协议。与UDP的数据模型是数据报文不一样,TCP的数据模型是字节流。
TCP Header
TCP的标准头部长度为20字节,若有附加的可选项就另算。
- 端口:从有源端口和目的端口这点可以看出,TCP也是端口与端口通信的传输层协议。
- 序列号字段:用于表示报文的顺序,是一个32位的上升方法的无符号数,到了2的32次方后再循环回到0。
- 确认号字段:确认号包含的字段是该确认号的发送方期待的下一个序列号。
- 标志位
- CWR:拥塞窗口减(发送方降低发送速率)
- ECE:ECN回应(发送方接收到一个更早的拥塞通告)
- URG:紧急指针有效(很少被使用)
- ACK:确认(确认字段有效,连接建立后一直有效)
- PSH:推送(接收方应该尽快给应用程序传送这个数据—没被可靠地实现或者用到)
- RST:重置连接(取消连接,通常是因为错误)
- SYN:用于初始化一个连接的同步序列号
- FIN:该报文段的发送方已经结束向对方发送数据
- 窗口大小:16位定义窗口大小,同时允许发送多少IP报文
- TCP校验和:用于差错检测
- 紧急指针:略
TCP协议特点:
- 差错检测
- 差错纠正
- 队列管理
- 重复消除
- 流量控制
- 拥塞控制
差错检测 & 差错纠正:
TCP同样是使用校验和与CRC来检测分组里的差错。当TCP检测到分组里又差错的时候,会使用重传的方式实现差错纠正,具体流程如下:
(1)因为TCP是一个面向连接的协议,所以每一个数据包的发送成功都会得意一个ACK响应,当某一个ACK丢失了,发送方无法根据其判断出是丢失了那个组,所以只能通过重传所有数据实现差错纠正
(2)同样的,若某一个分组被校验和检测出发生传输错误,那么接收方就不会回应ACK,让发送方超时,从而启动重传。
(3)若发生重传,那必定会有重复分组存在,所以得根据序列号进行去重操作。
队列管理 & 重复消除:
TCP能根据序列号与相应好来轻松实现IP切块与重组。
若发生重传,那必定会有重复分组存在,所以得根据序列号进行去重操作。
流量控制 & 拥塞控制:
TCP是通过变量窗口来实现流量控制和拥塞控制的。
因为TCP是面向连接的协议,能根据ACK的响应速度,改变窗口大小(令牌数量)从而改变IP数据包的发送数量,从而能在恶劣的网络环境保持通信的质量。
TCP生命周期器:
- TCP三次握手连接(三次握手)
- TCP四个握手断开连接(四次分手)
- TCP数据传输
TCP三次握手连接(三次握手):
TCP四个握手断开连接(四次分手):
TCP数据传输:
0 0
- 网络编程(2):TCP、UDP协议详解
- 网络编程学习笔记2(TCP/UDP协议)
- Java网络编程UDP与TCP协议
- java网络编程之UDP、TCP协议
- 网络编程的TCP/UDP协议
- 网络编程--传输协议tcp/udp
- day22网络编程 UDP、TCP协议
- 网络编程2-TCP UDP Socket使用详解
- 网络编程(UDP协议)
- 网络编程(UDP协议)
- [网络编程]TCP协议和UDP协议的区别
- 网络编程之UDP协议和TCP协议
- TCP、UDP协议详解
- TCP、UDP协议详解
- TCP、UDP协议详解
- TCP、UDP协议详解
- TCP、UDP协议详解
- TCP、UDP协议详解
- SQL SERVER——TempDB问题查找定位与解决
- maven 将依赖打入jar包
- tomcat学习笔记(2)——Connector模块
- Rxjava操作符大全
- 通过Postgis查询位置点是否落在指定区域内
- 网络编程(2):TCP、UDP协议详解
- 深拷贝 浅拷贝
- 练习系统 实验一 两倍数
- QT 错误列表
- Android ListView添加了HeaderView后,出现点击HeaderView区域跳转的问题
- 63-进程扇与进程链
- 【SpringMVC】解决静态引用中使用<mvc:resources />的问题
- TreeMap<K,V> 映射的使用 TreeMap 排序
- input 选择文件进行格式限制