学习笔记系列文章
网络互连模型
请求过程
网络分层
传输层(Transport)
UDP
数据格式:
UDP长度(Length)
占16位:首部的长度 + 数据的长度
检验和(Checksum)
端口
常用命令 【实践】
netstat –an 查看被占用的端口
netstat –anb 查看被占用的端口、占用端口的应用程序
telnet [主机] [端口] 查看是否可以访问主机的某个端口
TCP
TCP的几个要点:
- 可靠传输
- 流量控制
- 拥塞控制
- 连接管理(建立连接、释放连接)
数据格式:
首部 - 序号
首部 - 确认号
首部 - 数据偏移
- 占4位,取值范围是 0x0101 ~ 0x1111(5~15)
- 数据偏移 * 4 = 首部长度(Header Length)
- 首部长度是 20 ~ 60 字节
首部 - 保留
小细节: 有些资料中,TCP首部的 保留(Reserved)字段 占3位,标志(Flags) 字段占9位(Wireshark中也是如此)
首部 - 标志位
标志位(Flags)
URG(Urgent)
- 当 URG = 1 时,紧急指针字段才有效。表明当前报文段中有紧急数据,应优先尽快传送
ACK(Acknowledgment)
PSH(Push)
RST(Reset)
- 当 RST = 1 时,表明连接中出现严重差错,必须释放连接,然后再重新建立连接
SYN(Synchronization)
- 当 SYN = 1、ACK = 0 时,表明这是一个建立连接的请求
- 若对方同意建立连接,则回复 SYN = 1、ACK = 1
FIN(Finish)
- 当 FIN = 1 时,表明数据已经发送完毕,要求释放连接
首部 - 窗口
首部 - 检验和
检验和(CheckSum) 跟UDP一样,TCP检验和的计算内容:伪首部 + 首部 + 数据。 伪首部:占用12字节,仅在计算检验和时起作用,并不会传递给网络层。
要点 - 可靠传输
可靠传输是为了保证包的完整性,当有丢包、受到三次重复确认等情况,就会重新发包。
停止等待ARQ协议
ARQ(Automatic Repeat–reQuest),自动重传请求。
疑问: 若有个包重传了N次还是失败,会一直持续重传到成功为止么?
- 这个取决于系统的设置,比如有些系统,重传5次还未成功就会发送 reset报文(RST)断开TCP连接。
连续ARQ协议 + 滑动窗口协议
如果接收窗口最多能接收4个包,但发送方只发了2个包,接收方如何确定后面还有没有2个包? 等待一定时间后没有第3个包,就会返回确认收到2个包给发送方。
SACK(选择性确定)
SACK(Selective acknowledgment,选择性确认)技术
- 告诉发送方哪些数据丢失,哪些数据已经提前收到
- 使TCP只重新发送丢失的包,不用发送后续所有的分组
可靠传输图示: 思考: 为什么选择在传输层就将数据“大卸八块”分成多个段,而不是等到网络层再分片传递给数据链路层?
|