c++服务器开发之TCP

ipv4 前四位版本 4位首部长度 8位服务类型 位总长度
一个32位的四字节的整数值 例如 实际计算机编码表示 0x00000001
小端系统中在内存中的表示是 01 00 00 00
大端系统中在内存中的表示是 00 00 00 01

IP的特点  source port   destination port 
TCP将应用程序的传输数据分割成合适的数据块
定时器
延迟确认  ack判断来的是哪个包
检验和   checksum
流量控制

urgent pointer  紧急指针

判别数据包哪里来的?  TCP的消息插口  自己的IP地址 端口号 对方的IP地址 端口号     每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

TCP状态
(1)LISTEN (S) 服务器等着客户端来连接
(2)SYN-SET(C)客户端尝试来连接服务器
(3)SYN-RECEIVED(S)服务器确认首次连接
(4)ESTABLISHED(S C)建立连接了,可以双方发送数据(常态)
(5)FIN-WAIT-1(S C)等待对方关闭
(6)FIN-WAIT-2(S C)等待对方关闭
(7)CLOSE-WAIT(S C)等待自己应用程序关闭
(8)CLOSEING(S C)等待对方确认自己的关闭
(9)LAST-ACK(S C)等待最后一次确认消息
(10)TIME-WAIT(S C)确认对方受到自己的关闭消息(服务器端慎用)
(11)CLOSED(S C)实际上这一个不存在的状态(虚拟状态)
服务端最后不要通过socket关闭

TCP连接确认(三次握手)

c++服务器开发之TCP_第1张图片
ACK M+1/N+1  确认收到消息

TCP连接的断开(四次握手)

 

c++服务器开发之TCP_第2张图片

断开连接可以是客户端发出的也可以是服务器发出

为什么断开连接要四次握手,不是三次?

      TCP协议是全双工协议,客户端可以往服务器发送,服务器也可以发送给客户端,有可能出现一种半关闭情况,一方可以接受另外一方的消息,但是他不发送消息出去,为了完全断开连接,只接受不发送那方要告诉另外一方断开连接,故又发送一个FIN过去。

你可能感兴趣的:(计算机网络,TCP)