OSI网络五层
OSI模型(网络五层)
1
数据链路层的PDU叫做Frame(帧);网络层的PDU叫做Packet(数据包)
第一层物理层(Bit比特流)
1
#备:物理层处于最下层.后面依次
第二层数据链路层(Frame数据帧)
-
为什么最小数据帧为64个字节
-
由于CSMA/CD算法的限制,以太网帧必须不能小于某个最小长度。以太网中,最小帧长为64字节,这是由最大传输距离和冲突检测机制共同决定的。
-
规定最小帧长是为了避免这种情况发生:A站点已经将一个数据包的最后一个Bit发送完毕,但这个报文的第一个Bit还没有传送到距离很远的B站点。B站点认为线路空闲继续发送数据,导致冲突。
在wireshark 中,数据包的第二行指的是链路层协议。在Ethernet II中,SRC表示的是源地址。DST代表目的地址。Type(类型)为0x0800指IPv4协议,0x86dd IPv6协议数据,0x809B AppleTalk协议数据,0x8138 Novell类型协议数据等。0x0806ARP,0x0600 XNS (Xerox),0x6003 DECNET
第三层网络层(Packet数据包/报)
wireshark中帧字段的含义:
- Version(版本):分为IPv4,IPv6。
- Header Length:IPv4的首部长度。
- Differentiated Services Field(区分服务):用来获得更好的服务, 用来指定特殊的数据包处理方式。
- Total Length:指首部和数据的总长度。
- Identification:IPv4在存储器中维持一个计数器,每产生一个数据包,计数器加一,把值赋给该字段。
- Flags:目前只有两位有意义。最低位为1表示后面“还有分片”的数据报,为0表示这已经是最后一个数据片;中间一位为1表示“不能分片”,为0才允许分片。
- 片偏移:13位,较长的分组在经过通信链路中因为分组过大进行分片,分片后在原分组中的相对位置。片偏移以8字节为偏移单位
- Time to Live(生存时间):表示数据包在网络中的寿命,英文缩写是TTL(Time To Live),功能是“跳数限制”。
- Protocol:指出此数据包携带数度的协议。
- Header checksum(首部效验和):数据包每经过一个路由器,路由器都要重新计算一下首部检验和,若首部未发生变化,则此结果必为0,于是就保留这个数据报。这个字段只检验数据报的首部,但不包括数据部分。
- Source:发送数据包方IPv4地址。
- Destinatio:接受方IPv4地址。
- 选项字段:1字节到40字节不等。长度可变,支持排错,测量,安全等措施
第四层传输层(Segment数据段)
wireshark中帧字段的含义:
- Source Port(源端口):指通信发送方使用的端口号
- Destination Port(目的端口):通信接收方使用的端口号
- Sequence number(序列号):确保数据可靠传输的一个唯一值。TCP使用序列号追踪每个数据段的传输情况
- Acknowledgment number(确认号):接收端发送,提示发送端下一次该发的数据在整个文件中的序号。接收端收到后,会把这个序号之前的数据从缓存中删掉。
- Header Length:头部长度也叫数据偏移
Flags(标记):
- SYN(同步):发起连接的数据包,连接即握手进程
- ACK(确认):确认接受到数据的数据包,也会用来发起和断开链接
- RST(重置):数据包表示之前尝试建立的连接已被关闭或通信应用不接受连接
- FIN(结束):终止连接的数据包,发送方和接收方都要通过FIN数据包终止连接
- PSH(推送):数据包表示入住那数据包应该直接发送给应用,而不应该缓冲
- URG(紧急):表示数据包中承载的数据应立即由TCP协议栈处理
- CWR(拥赛窗口减小):数据包表示传输导致缓冲区已满或拥赛,通信各方应该降低传输速率,以免丢包
Window Size Value(窗口大小):这个字段表示的是发送方可以发送的数据总量。这个总量是在握手过程中决定的。在握手过程中,通信双方的主机匹配缓冲区大小。
Checksum(效验和):判断接受数据的完整性。可以让通信方确认TCP数据段中的内容是否发生变化了。
Urgent pointer(紧急指针):只有当 URG 标志置 1 时紧急指针才有效。TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
Options(可选项):包含三部分,1—标识可选项字段长度 2—标识数据包中的可选项 3—包含数据包中可选项。最常见的可选项字段是MSS(Maximum segment size)最长报文大小,每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。
TCP连接过程的几种状态
-
CLOSED:初始状态,表示没有任何连接。
-
LISTEN:Server端的某个Socket正在监听来自远方的TCP端口的连接请求。
-
SYN_SENT:发送连接请求后等待确认信息。当客户端Socket进行Connect连接时,会首先发送SYN包,随即进入SYN_SENT状态,然后等待Server端发送三次握手中的第2个包。
-
SYN_RECEIVED:收到一个连接请求后回送确认信息和对等的连接请求,然后等待确认信息。通常是建立TCP连接的三次握手过程中的一个中间状态,表示Server端的Socket接收到来自Client的SYN包,并作出回应。
-
ESTABLISHED:表示连接已经建立,可以进行数据传输。
-
FIN_WAIT_1:主动关闭连接的一方等待对方返回ACK包。若Socket在ESTABLISHED状态下主动关闭连接并向对方发送FIN包(表示己方不再有数据需要发送),则进入FIN_WAIT_1状态,等待对方返回ACK包,此后还能读取数据,但不能发送数据。在正常情况下,无论对方处于何种状态,都应该马上返回ACK包,所以FIN_WAIT_1状态一般很难见到。
-
FIN_WAIT_2:主动关闭连接的一方收到对方返回的ACK包后,等待对方发送FIN包。处于FIN_WAIT_1状态下的Socket收到了对方返回的ACK包后,便进入FIN_WAIT_2状态。由于FIN_WAIT_2状态下的Socket需要等待对方发送的FIN包,所有常常可以看到。若在FIN_WAIT_1状态下收到对方发送的同时带有FIN和ACK的包时,则直接进入TIME_WAIT状态,无须经过FIN_WAIT_2状态。
-
TIME_WAIT:主动关闭连接的一方收到对方发送的FIN包后返回ACK包(表示对方也不再有数据需要发送,此后不能再读取或发送数据),然后等待足够长的时间(2MSL)以确保对方接收到ACK包(考虑到丢失ACK包的可能和迷路重复数据包的影响),最后回到CLOSED状态,释放网络资源。
-
CLOSE_WAIT:表示被动关闭连接的一方在等待关闭连接。当收到对方发送的FIN包后(表示对方不再有数据需要发送),相应的返回ACK包,然后进入CLOSE_WAIT状态。在该状态下,若己方还有数据未发送,则可以继续向对方进行发送,但不能再读取数据,直到数据发送完毕。
-
LAST_ACK:被动关闭连接的一方在CLOSE_WAIT状态下完成数据的发送后便可向对方发送FIN包(表示己方不再有数据需要发送),然后等待对方返回ACK包。收到ACK包后便回到CLOSED状态,释放网络资源。
-
CLOSING:比较罕见的例外状态。正常情况下,发送FIN包后应该先收到(或同时收到)对方的ACK包,再收到对方的FIN包,而CLOSING状态表示发送FIN包后并没有收到对方的ACK包,却已收到了对方的FIN包。有两种情况可能导致这种状态:其一,如果双方几乎在同时关闭连接,那么就可能出现双方同时发送FIN包的情况;其二,如果ACK包丢失而对方的FIN包很快发出,也会出现FIN先于ACK到达。