Socket套接字

Socket原理

  1. 网络中如何唯一的标识一个进程

    • 网络层中的IP地址可以唯一的标识一台主机
    • 传输层中的"协议+端口"可以唯一的标识主机中的应用程序(进程),因此,可以利用三元组(ip地址,协议,端口)标识网络中的进程。
  2. Socket怎么通信

    1. SOCK_STREAM:表示面向连接的数据传输方式,数据可以准确无误的到达另一台计算机,如果有损失或者丢失,可以重新传输,但效率相对较慢,常见的http协议就是用的SOCKET_STREAM传输数据。因此要确保数据的正确性。
    2. SOCK_DGRAM:表示无连接的数据传输方式,计算机只能传输数据,不做数据校验。如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的,无法重传,因为SOCK_DGRAM做的工作较少,所以效率比SOCK_STREAM高。例如QQ视频聊天。
  3. TCP/IP协议

    1. 三次握手:
      TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接,客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。
      TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)。可以形象的比喻为下面的对话:
    [Shake 1] 套接字A:“你好,套接字B,我这里有数据要传送给你,建立连接吧。”
    [Shake 2] 套接字B:“好的,我这边已准备就绪。”
    [Shake 3] 套接字A:“谢谢你受理我的请求。
    
    1. TCP的粘包问题以及数据的无边界性:https://blog.csdn.net/m0_37947204/article/details/80490512

    2. TCP数据报的结构:

      • 序号:Seq(Sequence Number)序号占32位,用来标识从计算机A发送到计算机B的数据包的序号,计算机发送数据时对此进行标记。
      • 确认号:Ack(Acknowledge Number)确认号占32位,客户端和服务器端都可以发送,Ack = Seq + 1。
      • 标志位:每个标志位占用1Bit,共有6个,分别为 URG、ACK、PSH、RST、SYN、FIN,具体含义如下:
        1. URG:紧急指针(urgent pointer)有效。
        2. ACK:确认序号有效。
        3. PSH:接收方应该尽快将这个报文交给应用层。
        4. RST:重置连接。
        5. SYN:建立一个新连接。
        6. FIN:断开一个连接。
    3. 链接的建立:

原文地址:https://www.cnblogs.com/charlottepl/p/12943316.html