JHHK

欢迎来到我的个人网站
行者常至 为者常成

7、传输层

目录

快速开始

一、UDP

1、udp协议首部示例 img

2、端口

客户端端口临时随机开启
服务端端口不同协议有不同端口
防火墙可以禁用某些端口来达到禁止访问的目的 比如数据库协议

二、TCP

img

传输层(Transport)

传输层有2个协议
TCP(Transmission Control Protocol),传输控制协议
UDP(User Datagram Protocol),用户数据报协议

img

UPD(User Datagram Protocol)

一、介绍

UDP是无连接的,减少了建立和释放连接的开销
UDP尽最大能力交付,不保证可靠交付
因此不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)

img

UDP长度(Length)
占16位,首部的长度 + 数据的长度

二、检验和(Check Sum)

检验和的计算内容:伪首部 + 首部 + 数据
伪首部:仅在计算检验和时起作用,并不会传递给网络层

img

三、端口(Port)

UDP首部中端口是占用2字节
可以推测出端口号的取值范围是:0~65535

客户端的源端口是临时开启的随机端口
防火墙可以设置开启\关闭某些端口来提高安全性

img

常用命令行
netstat -an:查看被占用的端口
netstat -anb:查看被占用的端口、占用端口的应用程序
telnet 主机 端口:查看是否可以访问主机的某个端口

安装telnet:控制面板 – 程序 – 启用或关闭Windows功能 – 勾选“Telnet Client” – 确定

四、Wireshark数据

img

TCP(Transmission Control Protocol)

一、数据格式

img

数据偏移
占4位,取值范围是0x0101~0x1111
乘以4:首部长度(Header Length) 首部长度是20~60字节

保留
占6位,目前全为0

小细节1

img

有些资料中,TCP首部的保留(Reserved)字段占3位,标志(Flags)字段占9位
Wireshark中也是如此

小细节2

UDP的首部中有个16位的字段记录了整个UDP报文段的长度(首部+数据)
但是,TCP的首部中仅仅有个4位的字段记录了TCP报文段的首部长度,并没有字段记录TCP报文段的数据长度

分析
UDP首部中占16位的长度字段是冗余的,纯粹是为了保证首部是32bit对齐
TCP\UDP的数据长度,完全可以由IP数据包的首部推测出来
传输层的数据长度 = 网络层的总长度 – 网络层的首部长度 – 传输层的首部长度

二、检验和

跟UDP一样,TCP检验和的计算内容:伪首部 + 首部 + 数据
伪首部:占用12字节,仅在计算检验和时起作用,并不会传递给网络层

img

四、标志位(Flags)

URG(Urgent)
当URG=1时,紧急指针字段才有效。表明当前报文段中有紧急数据,应优先尽快传送

ACK(Acknowledgment)
当ACK=1时,确认号字段才有效

PSH(Push)

RST(Reset)
当RST=1时,表明连接中出现严重差错,必须释放连接,然后再重新建立连接

SYN(Synchronization)
当SYN=1、ACK=0时,表明这是一个建立连接的请求

若对方同意建立连接,则回复SYN=1、ACK=1

FIN(Finish)
当FIN=1时,表明数据已经发送完毕,要求释放连接

五、序号、确认号、窗口

序号(Sequence Number)
占4字节
首先,在传输过程的每一个字节都会有一个编号
在建立连接后,序号代表:这一次传给对方的TCP数据部分的第一个字节的编号

确认号(Acknowledgment Number)
占4字节
在建立连接后,确认号代表:期望对方下一次传过来的TCP数据部分的第一个字节的编号

窗口(Window)
占2字节
这个字段有流量控制功能,用以告知对方下一次允许发送的数据大小(字节为单位)


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.