传输层
传输层概念
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;