目录
快速开始
一、UDP
1、udp协议首部示例
2、端口
客户端端口临时随机开启
服务端端口不同协议有不同端口
防火墙可以禁用某些端口来达到禁止访问的目的 比如数据库协议
二、TCP
传输层(Transport)
传输层有2个协议
TCP(Transmission Control Protocol),传输控制协议
UDP(User Datagram Protocol),用户数据报协议
UPD(User Datagram Protocol)
一、介绍
UDP是无连接的,减少了建立和释放连接的开销
UDP尽最大能力交付,不保证可靠交付
因此不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)
UDP长度(Length)
占16位,首部的长度 + 数据的长度
二、检验和(Check Sum)
检验和的计算内容:伪首部 + 首部 + 数据
伪首部:仅在计算检验和时起作用,并不会传递给网络层
三、端口(Port)
UDP首部中端口是占用2字节
可以推测出端口号的取值范围是:0~65535
客户端的源端口是临时开启的随机端口
防火墙可以设置开启\关闭某些端口来提高安全性
常用命令行
netstat -an:查看被占用的端口
netstat -anb:查看被占用的端口、占用端口的应用程序
telnet 主机 端口:查看是否可以访问主机的某个端口
安装telnet:控制面板 – 程序 – 启用或关闭Windows功能 – 勾选“Telnet Client” – 确定
四、Wireshark数据
TCP(Transmission Control Protocol)
一、数据格式
数据偏移
占4位,取值范围是0x0101~0x1111
乘以4:首部长度(Header Length) 首部长度是20~60字节
保留
占6位,目前全为0
小细节1
有些资料中,TCP首部的保留(Reserved)字段占3位,标志(Flags)字段占9位
Wireshark中也是如此
小细节2
UDP的首部中有个16位的字段记录了整个UDP报文段的长度(首部+数据)
但是,TCP的首部中仅仅有个4位的字段记录了TCP报文段的首部长度,并没有字段记录TCP报文段的数据长度
分析
UDP首部中占16位的长度字段是冗余的,纯粹是为了保证首部是32bit对齐
TCP\UDP的数据长度,完全可以由IP数据包的首部推测出来
传输层的数据长度 = 网络层的总长度 – 网络层的首部长度 – 传输层的首部长度
二、检验和
跟UDP一样,TCP检验和的计算内容:伪首部 + 首部 + 数据
伪首部:占用12字节,仅在计算检验和时起作用,并不会传递给网络层
四、标志位(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字节
这个字段有流量控制功能,用以告知对方下一次允许发送的数据大小(字节为单位)
行者常至,为者常成!