[整理] Socket通信的三次握手和四次握手

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。

基本操作有:

  1. socket()函数
  2. bind()函数
  3. listen()、connect()函数
  4. accept()函数
  5. read()、write()函数等
  6. close()函数

服务器端:
先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。

客户端:
初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。

客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。

位码即TCP标志位,有6种标示:

  1. SYN(synchronous['sɪŋkrənəs]建立联机) _同步
  2. ACK(acknowledgement[ək'nɒlɪdʒmənt] 确认)
  3. PSH(push传送)
  4. FIN(finish结束)
  5. RST(reset重置)
  6. URG(urgent ['ɜːdʒənt]紧急)

Sequence number(顺序号码) Acknowledge number(确认号码)

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
三次握手建立连接:

  1. 第一次握手:
    主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
  2. 第二次握手:
    主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;
  3. 第三次握手:
    主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

四次握手释放连接

posted @ 2020-11-20 13:42  哆啦梦乐园  阅读(526)  评论(2编辑  收藏  举报