进程与进程通信

在数据链路层,数据之间通过点对点的方式进行传输(局域网)。在网络层,数据通过主机对主机方式进行通信,IP数据包的发送与接收。在传输层,进程或应用程序通过端口进行通信,也叫进程与进程之间的通信,TCP与UDP协议就是在这一层次工作的。

端口和套接字

端口是标识指定应用程序的一种方式,用16位的bit表示,共有 2^16-1=65535 个端口总数。端口分为已定义端口和临时端口

  1. 已定义端口:
    • 小于255的端口是为公共应用保留的
    • 255~1023之间的端口被分配给一些公司的市场应用
    • 大于1023的端口未定义。
  2. 临时端口
    • 客户端与服务器连接的时候,主要客户端需要,运行客户端进程的主机就会给客户端临时分配一个临时端口。
      套接字(socket)是我们在网络中可以命名和寻址的通信连接点(端点)。通常情况下,一台主机采用典型的系统配置作为服务器,其它主机作为客户端。客户端连接服务器,并与之交换信息,最后断开连接,相当于螺帽一样的存在。
  3. 套接字连接类型
    • 面向连接(TCP)7
    • 无连接(UDP)

UDP

  1. UDP 工作流程:
    • 将上层数据封装,填充上UDP头部,发送给下层协议(IP协议),
  2. UDP不做什么:
    • 发送数据前建立连接
    • 检测数据的丢失并重传
    • 保证接受数据的顺序与发送数据的顺序一致
    • 提供拥塞处理机制,以及两个应用之间的流控制机制
  3. UDP消息格式
    UDP数据报分为两个部分:UDP头部和UDP数据区域。头部数据的组成如下:
    • 源端口号:16位,表明发送UDP数据的源进程的端口
    • 目标端口号: 16位,表明接收UDP协议的目标进程的端口
    • 长度:16位,表明用户数据报的长度,以字节计。包括头部长度。
    • 校检和:一个可选的16位字段,是伪IP头部,UDP头部,UDP数据的反码和(异或运算)。
      数据区域: 长度可变,被封装在上层消息中被发送出去。

TCP

  1. TCP连接的建立(三次握手)
    这里的客户端个服务端的概念是相对的。客户端有可能是服务端,服务端也有可能是客户端。
    TCP的建立是通过元数据SYN+ACK来确认连接信息的。 SYN元数据用于标识报文,以方便将报文重组。ACK元数据表示的是一个“确认回复”消息。值和接收到的syn值有关,一般是+1的关系。为了简单,我们将SYN报文的序列号称作SEQ
    1. 客户端发送SEQ=J,ACK=0给服务端请求建立连接,如果超过一定时间没收到服务端的响应(计时器超时),会重新发送请求。
    2. 服务端收到请求,回复SEQ=K(k是随机值),ACK=J+1表示接收到请求,同意建立连接。
    3. 客户端发送 SEQ=J+1,ACK=K+1,确认号ACK=K+1表示客户端已经接收到服务端的响应,开始建立连接
  2. TCP连接的四次挥手
    TCP建立一次连接需要三次握手,而结束一个连接却需要四次,这是因为TCP的半关闭状态决定的(一端处于开启状态,一端处于关闭状态)。由于TCP是全双工通信,所以两端都要关闭才能算是关闭。
    1. 客户端首先调用关闭,发送FIN码给服务端,假设这里的FIN 值为M.
    2. 服务端接收到带有FIN码的请求,执行被动关闭,并回复确认信息给客户端,此时ACK的值为M+1.同时传输给用户一个结束文件,这是因为接收到FIN码意味着服务端不再向客户端发送文件。
    3. 服务端会请求客户端进行关闭连接,发送FIN码的请求,这里假设值为N。同时会开启一个计时器,若超时,没收到客户端发送的确认信息,会自动关闭连接
    4. 客户端同意服务端的关闭确认,回复ACK=N+1给服务端同意连接关闭。
      当客户端发送的FIN码,服务端没收到,会引发客户端重传,当经过N次重传失败的时候,客户端就会放弃重传,关闭连接。但当发送者关闭连接,服务端并不知道,所以服务端会处于完全活动状态,这就导致了半关闭状态。为了避免这种问题,一种解决方案是,当服务端在指定的时间没接收到客户端发送的数据,就自动单方面关闭连接。那么这个半关闭状态问题就解决了。
  3. TCP头部数据格式

| 00~15 | 16~31|
| :—–: | :—–: | :—–:| | :—–: | :——: | :——–: | :—: | :—-: |
| 源端口号 | 目的端口号|
| 序号 |
| 确认号 |
| 4位头部长度 | 6位保留 | URG | ACK | PSH | RST | SYN | 窗口大小 |
| 校检和 | 紧急指针 |
| 选项 |
| 数据 |

Read More

默认配图