[整理] Socket通信的三次握手和四次握手
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
基本操作有:
- socket()函数
- bind()函数
- listen()、connect()函数
- accept()函数
- read()、write()函数等
- close()函数
服务器端:
先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。
客户端:
初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。
客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。
位码即TCP标志位,有6种标示:
- SYN(synchronous['sɪŋkrənəs]建立联机) _同步
- ACK(acknowledgement[ək'nɒlɪdʒmənt] 确认)
- PSH(push传送)
- FIN(finish结束)
- RST(reset重置)
- URG(urgent ['ɜːdʒənt]紧急)
Sequence number(顺序号码) Acknowledge number(确认号码)
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
三次握手建立连接:
- 第一次握手:
主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机; - 第二次握手:
主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包; - 第三次握手:
主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
四次握手释放连接
附记:在茫茫的信息海洋中,遇到就是有缘,期待回复交流,为缘分留下痕迹……