TCP UDP及socket编程学习(二)

Linux socket编程


基本流程
准备阶段
Server
1. 调用socket函数,创建某一类型的socket
2. 调用listen函数,设置倾听队列的长度,为接受来自client的请求做准备
3. 调用accept函数,开始在所绑定的端口倾听来自client端的连接请求
     如果socket被设置为阻塞,那么accept将被阻塞,进程被挂起,直到有client连接

Client
1. 调用socket函数,创建某一类型(和server一样)的socket
2. 调用connect函数,向server发起连接请求
     连接的报文包含了client端的初始的序号SYN a 和 MSS=1460信息(最大数据段的大小)

server接收到client的连接请求后,server从accept函数返回,server向client发送server端的初始序号SYN b,和对client端的SYN a的确认ACK=a+1,还有最大数据段大小 MSS
client接收到server的回应时,将发出对server请求的回应ACK=b+1。然后client从connect函数中返回
server接收到client端响应时,从accept函数返回

发送数据阶段
双方使用write将要发送的数据写到TCP缓冲区,read从TCP缓冲区读出


关闭连接

双方发送完数据后,close关闭socket描述符

client调用close函数,client的TCP层发送FIN控制信息的数据段,server端接收到client的FIN关闭连接请求,对client端的FIN的确认,server端的读管道被关闭,从这个TCP连上的read将返回0。

server调用close函数,发送关闭请求FIN,client发送确认信息,进入CLOSE状态,server接收到确认信息,server进入CLOSE状态,此时连接关闭。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章