TCP/IP网络协议总结(三) 数据传输中的TCP

一、TCP通信中的12种状态迁移图

                  

       

网络事件:主要是FD_WRITE/FD_READ
FD_WIRTE触发条件:
  1.client 通过connect()首次和server建立连接时,在client端会触发FD_WRITE事件;
  2.server通过accept()接受client连接请求时,在server端会触发FD_WRITE事件;
  3.send()/sendto()发送失败返回WSAEWOULDBLOCK,并且当缓冲区有可用空间时,则会触发FD_WRITE事件;
 
FD_READ触发条件:
  1.在数据到达socket后,并且从来没有触发过FD_READ(也就是最开始的阶段) ;
  2.在数据到达socket后,并且前一个recv()调用后;
  3.调用recv()后,缓冲区还有未读完的数据

 

二、TCP通信中的socket编程与数据流向

                 

                通常是客户端主动断开连接,server端read 读到EOF并且处理完数据,正常断开来连接。

 

client客户端:
connect();客户端主动连接服务器请求三次握手建立TCP连接,由Linux内核完成三次握手,握手包是由传输层产生的,与应用层无关。connect()这个函数是一个堵塞函数,从client发送SYN包开始直到成功建立连接。建立连接成功返回0,失败返回-1。
server端:
listen();被动连接,监听来自客户端的请求,将socketfd加入到半连接状态的队列中,将监听到的socketfd,还有监听队列长度通知内核;listen是一个非堵塞函数。通过Backlog这个参数可以设置内核中队列的大小长度。
accept();从连接队列中取出连接,当没有连接是accept会堵塞等待连接。当server连接队列满了的时候,不会对新建立的连接syn应答,客户端没有connect会返回ETIMEDOUT。当server连接队列满了的时候,并不会拒绝连接,会使连接延时。

 

三、TCP传输协议之重传机制

 

 

四、TCP传输协议之滑动窗口

 

 

五、TCP传输协议之流量控制

 

 

六、TCP传输协议之网络拥塞控制

 

posted @ 2020-08-23 20:37  will287248100  阅读(229)  评论(0编辑  收藏  举报