命名:netstat -apn 查看状态
netstat -apn | grep ......
TCP状态时序图:
1.主动发起连接请求端: CLOSE --发送SYN--SEND_SYN --接受 ACK、SYN --SEND_SYN--发送 ACK --ESTABLISHED(数据通信状态)
2.主动关闭连接请求端; ESTABLISHED(数据通信状态) --发送FIN --FIN_WAIT_1 --接受 ACK --FIN_WAIT_2(半关闭)
--接受对端发送 FIN --FIN_WAIT_2(半关闭) --回发 ACK --TIME_WAIT(只有主动关闭连接方会经历该状态)
-- 等 2MLS时长(大约40s) --CLOSE
3.被动接受连接请求端: CLOSE -- LISTEN --接收 SYN -- LISTEN --发送 ACK SYN --SYN_RCVD --接收ACK --ESTABLISHED
4.被动关闭连接请求端: ESTABLISHED -- 接收 FIN --ESTABLISHED --发送ACK
--CLOSE_WAIT (说明对端【主动关闭连接请求端】处于半关闭状态)
--发送 FIN--LASK_ACK --接收ACK--CLOSE
重点记忆: ESTABLISHED 、FIN_WAIT_2 <->CLOSE_WAIT 、TIME_WAIT(2MLS)
2MLS时长:
一定出现在 主动关闭连接请求端 ---TIME_WAIT
保证,最后一个 ACK 能成功被对端收到。(等待期间,对端没收到我发的 ACK ,对端会再次发送 FIN 请求)
端口复用:
int opt =1 ; //设置端口复用。
setsockopt(lfd,SOL_SOCKET,SO_REUSEADDR,(void*)&opt,sizeof(opt))
半关闭:
通信双方中,只有一端关闭通信 --FIN_WAIT_2
close(lfd);
shutdown (int fd,int how)
how: SHUT_RD 关读端
SHUT_WR 关写端
SHUT_RDWR 关读写
shutdown 在关闭多个文件描述符对应的文件时(采用dup2后),采用全关闭方法。close 值关闭一个