传输层
传输层概念
20byte = 4 byte(32) * 5
UDP头部仅需要8字节 4 * 2
MTU网络帧的最大长度,要小于1472
面向连接和无连接
面向连接:计算机之前要维护一个连接
无连接:单向发送数据包,不承担通知目的计算机接受数据的职责
端口和套接字
应用程序可以通过TCP/UDP向指定端口发送数据,达到向目的应用程序发送数据。
常用tcp端口列表
1 | tcpmux | TCP |
5 | rje | 远程作业入口 |
7 | echo Echo | 服务 |
9 | discard | 用于连接测试的空服务 |
11 | systat | 用于列举连接了的端口的系统状态 |
13 | daytime | 给请求主机发送日期和时间 |
17 | qotd | 给连接了的主机发送每日格言 |
18 | msp | 消息发送协议 |
19 | chargen | 字符生成服务 |
20 | ftp | -data FTP 数据端口 |
21 | ftp | 文件传输协议 |
22 | ssh | 安全 |
23 | telnet | Telnet |
25 | smtp | 简单邮件传输协议 |
多路复用/分解
多路复用的关键就是端口号,依靠端口号准确无误的发送数据
TCP
TCP特性
- 面向流的处理
- 重新组装排序
- 流量与安全
- 优先与安全
TCP数据格式
下来的交互流程中会对照解释这些字段
- 源端口、目的端口
16位 256*256 =65536 - 序列号 32
当SYN标记不为1,这就是当前数据分段第一个字节的序列号,如果SYN为1,这个字段的初始值就是初始序列值(ISN)由于对序列号同步,这是第一个字节序列号比这个字段的值大1(ISN+1)
序号 | |
---|---|
SYN != 1 | 第一个字节序列号 |
SYN ==1 | ISN,ISN+1 |
- 确认号
用于接受已经收到的数据分段,其值就是计算机即将接受到的下一个序列号,也就是上一个接受到的字节的序列号+1。 - 数据偏移
4位首部长度,这个字段表示报头的长度。也就告诉我们接收端的TCP软件数据从何开始,这个值得单位是32位的字。 - 保留
为TCP未来发展的保留字段,必须全为0。 - URG
为1时表示当前的数据分段是紧急的,也会让紧急指针字段的值有意义 - ACK
为1时表示确认号是有意义的
- PSH
为1时表示TCP软件把目前收到的全部数据都通过管道传递给接受应用程序 - RST
为1时会重置连接 - SYN
为1时表示序列号将被同步,说明这是一个连接的开始 - FIN
为1时表示计算机已经没有数据发送 - 窗口
用于流量控制参数,它定义了发送计算机的发送序列号可以超过最后一个已确认序列号的数量。也就是说,发送方不必等待每个数据段被准确的接受收才发下一个数据分段,允许已接确认接收到的序列号与正在发送的序列号有一定差别,但必须在适当的范围 - 校验和
用于检查数据分段的完整性,接收端计算机会根据接受到的数据计算校验和,并且把结构和这个字段比较。TCP/UDP在计算校验和时包含一个具有IP地址的伪报头 - 紧急指针
这是一个偏移量指针,指向标记紧急信号开始的序列号 - 选项
指定一些可选设置中的某一项 - 填充
填充额外的0 - 数据
数据分段中的数据
TCP交互流程
三次握手建立连接、四次握手断开连接
- 被动打开
被通知去建立TCP连接,去传给应用程序数据 - 主动打开
通知别人主动去建立连接。通常服务器都是监听端口,等待别人建立连接。
相互传数据时计算机a、b都必须知道对方的ISN(初始序列号
)
a去向b发送请求建立连接
建立连接
step1:
A主动发送消息,SYN=1(数据的开始),(确认字段)ACK=0,序列号seq(当前A接受数据的位置)。然后就进入SYN-SENT
字段。
step2:
服务端B,接受到消息后。SYN设为1,ACK设为X+1。序列号为y(b的接受)
step3:
seq设置为X+1,ACK为Y+1
断开连接
step1:
客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态
step3:
服务端收到来自客户端的请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端年进入CLOSE_WAIT状态
step3:
服务端发送一个FIN给客户端,ACK置为1,Sequence置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态
step3:
客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务端,Acknowledge置为w+1,Sequence Number置为u+1,最后客户端和服务端都进入CLOSED状态
秒懂图
可以看见,依赖ACK去标识
UDP
UDP十分简单是广播协议默认传输协议。User Datagram Protocol
协议格式
伪包头
UDP和TCP都是
伪首部, 又称为伪包头(Pseudo Header):是指在 TCP 的分段或 UDP 的数据报格式中,在数据报首部前面增加源 IP 地址、目的 IP 地址、IP 分组的协议字段、TCP 或 UDP 数据报的总长度等共12字节,所构成的扩展首部结构。此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。
防火墙
防火墙就是TCP/UDP层
wireshake的使用
格式查看
https://www.cnblogs.com/mq0036/p/11187138.html
按照source和dest过滤
ip.dst192.168.101.8;查找源地址为ip.src1.1.1.1;