网络包:
URG 紧急指针( urgent pointer)有效。
ACK 确认序号有效。
PSH 接收方应该尽快将这个报文段交给应用层。
RST 重建连接。
SYN 同步序号用来发起一个连接。
FIN 发端完成发送任务。
一个HTTP请求的包序列,
抓包的过滤器是“tcp port http”
(否则还会有3个握手包:
1.client (port:53449)--[SYN]-->Server(port:80)
2.Server(port:80)--[SYN,ACK]-->client (port:53449)
3.client (port:53449)--[ACK]-->Server(port:80)
)
ACK==对方Seq+1
1. client (port:53449)--页面请求-->Server(port:80)是基于应用级协议HTTP传送的
2. Server(port:80)--页面内容-->client (port:53449)是TCP传送的
3. 由于页面比较大,故Server端的页面会分解成多个包传过去。
而client端收到了会返回ACK,其中NO11中的ACK 的Ack:13140; 13140刚好是No10的[Next sequence number]和No12的[sequence number]
4.所有的页面片段传送完,HTTP协议会组装起来,弄成独立的包,即NO37. No37的sequence number是42460
TCP
对方发送数据,套接口变为可读且read返回大于0
对方发送FIN(对方进程终止),套接口就变成可读且read返回0(文件结束)
对方发送RST(对方主机崩溃并重启),套接口就变为可读且返回-1,errno则含有明确的错误码
我们对返回为0的关闭,对返回-1的关闭且视其情况是否记日志
close终止了数据传送的方向是读和写。由于TCP连接时全双工的,有很多时候我们要通知另一端我们已完成了数据发送,那一端仍有很多数据要发送也是如此。