1。tcp连接的建立与终止
建立过程:
(1).客户端请求建立连接。ACK=0 SYN=1 sequence number=ISN(CLIENT) acknowledgement number=null options=mss
(2).服务段确认连接。ACK=1 SYN=1 sequence number=ISN(SERVER) acknowledgement number=ISN(CLIENT)+1 options=mss
(3).建立连接。ACK=1 SYN=0 acknowledgement number=ISN(SERVER)+1
终止过程:
(1).客户端断开连接请求。ACK=1 FIN=1 sequence number=ISN(CLIENT)+N+1 acknowledgement number=ISN(SERVER)
(2).服务器确认。ACK=1 FIN=0 acknowledgement number=ISN(CLIENT)+N+1
(3).服务器断开连接请求。ACK=1 FIN=1 sequence number=ISN(SERVER)+N+1 acknowledgement number=ISN(CLIENT)+N+1
(4).客户端确认。ACK=1 FIN=1 acknowledgement number=ISN(SERVER)+N+1
2。push标志的设置
(1).当应用程序向tcp连接写八个1024bytes数据时,每个数据的tcp报文的push标志都为1。
(2).当应用程序向tcp连接写一个8*1024bytes数据时,理论上是只要把最后一个tcp报文的push标志设为1就可以。但是由于发送端的发送缓冲区大小的限制,所以会出现每次发送缓冲区的多个tcp报文时,最后一个tcp报文的push标志都要设置为1。
3。tcp通信过程
(1).A、B两台主机处于同一网段:
A主机发出RAP广播,得到B主机的mac值。然后封装数据包,源mac值为A的mac地址、目标mac值为B的mac地址、源ip为A的ip地址、目的ip指为B的ip地址。
A-------------------------------->BsourceIp: Ip_a
sourceMac: Mac_a
destIp: Ip_b
destMac: Mac_b
(2).A、B不处于同一网段,两主机之间经由c、d两个路由器
A---------------------->c----------------------->d------------------------>B
sourceIp: Ip_a sourceIp: Ip_a sourceIp: Ip_a
sourceMac: Mac_a sourceMac: Mac_c2 sourceMac: Mac_d2
destIp: Ip_b destIp: Ip_b destIp: Ip_b
destMac: Mac_c1 destMac: Mac_d1 destMac: Mac_b
sadfd