TCP/IP数据包的传输状态

数据包的状态

[root@m01 ~]$netstat -anptul
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      7127/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      7212/master         
tcp        0     52 10.0.0.61:22            10.0.0.1:58421          ESTABLISHED 7808/sshd: root@pts 
tcp        0      0 10.0.0.61:22            10.0.0.1:54035          ESTABLISHED 7390/sshd: root@pts 
tcp6       0      0 :::21                   :::*                    LISTEN      7133/vsftpd         
tcp6       0      0 :::22                   :::*                    LISTEN      7127/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      7212/master  
连接状态 说明 type
NEW 主机向远程机器发时一个连接请求,这个数据包状态是NEW STREAM/DGRAM
ESTABLISHED 当联接建立之后,远程主机和你主机通信数据状态为ESTABLISHED STREAM/DGRAM
RELATED 像ftp这样的服务,用21端口传送命令,而用20端口(port模式)或其他端口(PASV模式)传送数据。在已有21端口上建立好连接后发送命令,用20传送的数据,状态是RELATED STREAM/DGRAM
LISTEN 正在监听状态,还未建立连接 STREAM/DGRAM
CONNECTED 已连接的状态 STREAM/DGRAM

iptables设置数据状态规则

通过IP tables防火墙规则来理解数据包的状态连接

主动连接:向远程主机主动发起连接,数据包的状态是NEW,再接收到的数据包状态就是ESTABLISHED。

1 iptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT   

2 iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT

3 iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

4 iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT

netstat查看服务的连接状态

常见参数 功能(socket,进程,服务,端口)
a 显示所有端口(监听和监听的)
t 仅显示tcp的端口连接
u 仅显示udp相关的端口连接
l 仅列出处于listen(监听)服务状态的socket
p 现实建立连接的程序名称和进程ID
r 现实路由信息,路由表
e 显示扩展信息
s 按照协议来统计程序连接的数据状态
c 每隔一段时间执行netstat命令
i 显示网络接口列表,像是ifconfig使用netstat -ie
#两秒执行一次netstat查询TCP协议连接的进程
[root@m01 ~]$netstat -tup -c 2
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0     52 localhost:ssh           localhost:54035         ESTABLISHED 7390/sshd: root@pts 
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 localhost:ssh           localhost:54035         ESTABLISHED 7390/sshd: root@pts 

传输层TCP/UDP

点对点的连接:通信双方在同一链路上

端对端的连接:通信双方通过电缆进行通信

TCP:面向连接,提供服务前建立专门的传输连接,并且这条连接可管理,在需要或通信结束时进行拆除。面向连接的传输服务是可靠的传输服务,提供拥塞控制、差错控制和流量控制。

​ 其建立在不可靠的分组传输服务上,可能出现丢失、乱序、延迟、重复等等问题,因此,TCP必须使用三次握手、超时与重传功能。

UDP:无连接,直接发送,不管是否送达,尽力而为,速度比较快

tcp数据包头

socket端到端的连接

​ 区分不同应用进程间的网络通信和连接,实现数据传输的并发服务,TCP/IP通信中,应用程序把数据传送给socket,由socket通过传输层向下提交给网路驱动程序并向网络上发送出去。计算机从网络上收到与该socket绑定IP地址和端号相关的数据后,由网络驱动程序通过传输层向上提交给应用层的socket,最后应用程序从socket中提取所要接受的数据。

通过简单的python代码来说明socket数据传输

#server
import socket                      #导入socket模块
sk = socket.socket()               #引用socket函数
sk.bind(("127.0.0.1",8080))        #绑定IP地址和端口
sk.listen()                        #监听
conn,address = sk.accept()                          #获取连接
conn.send("哈喽客户端,我是server".encode("utf-8"))    #向客户端发送数据
msg = conn.recv(1024).decode("utf-8")               #接收客户端信息
print(msg)
sk.close()

#client
import socket
sk = socket.socket()
sk.connect(("127.0.0.1",8080))                        #连接到服务器端
msg = sk.recv(1024).decode("utf-8")                   #接收服务端数据
sk.send("你好server,我是client".encode("utf-8"))        #回复服务端消息
print(msg)
sk.close()

TCP socket.socket():

​ 设置端口和地址;send()向服务器发送数据;recv()接受服务器数据;close()关闭套接字

UDP socket.socket(type=socket.SOCK_DGRAM):

​ 设置端口和地址;sendto()向服务器发送数据;recvfrom()接受服务器数据;close()关闭套接字

图例说明:

socket

TCP连接状态

TCP/IP连接

状态 描述
CLOSED 呈阻塞、关闭状态,表示主机当前没有活动的传输连接或者正在进行传输连接
LISTEN 呈监听状态,表示服务器正在等待新的传输连接进入
SYN RCVD 表示主机已经收到一个传输连接请求,但尚未确认
SYN SENT 表示主机已经发出一个传输连接请求,等待对方确认
ESTABLISHED 传输连接建立,通信双方进入正常的数据传输状态
FIN WAIT 1 (主动关闭)主机已经发送关闭连接请求,等待对方确认
FIN WAIT2 (主动关闭)主机已经收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
TIMED WAIT 完成双向传输连接关闭,等待所有分组消失
CLOSING 双方同时尝试关闭传输连接,等待对方确认
CLOSE WAIT (被动关闭)收到对方发来的关闭传输连接请求,并已确认
LAST ACK (被动关闭)等待最后一个关闭传输连接确认,并等待所有分组消失
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章