Socket原理
-
网络中如何唯一的标识一个进程
- 网络层中的IP地址可以唯一的标识一台主机
- 传输层中的"协议+端口"可以唯一的标识主机中的应用程序(进程),因此,可以利用三元组(ip地址,协议,端口)标识网络中的进程。
-
Socket怎么通信
- SOCK_STREAM:表示面向连接的数据传输方式,数据可以准确无误的到达另一台计算机,如果有损失或者丢失,可以重新传输,但效率相对较慢,常见的http协议就是用的SOCKET_STREAM传输数据。因此要确保数据的正确性。
- SOCK_DGRAM:表示无连接的数据传输方式,计算机只能传输数据,不做数据校验。如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的,无法重传,因为SOCK_DGRAM做的工作较少,所以效率比SOCK_STREAM高。例如QQ视频聊天。
-
TCP/IP协议
- 三次握手:
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接,客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。
TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)。可以形象的比喻为下面的对话:
[Shake 1] 套接字A:“你好,套接字B,我这里有数据要传送给你,建立连接吧。” [Shake 2] 套接字B:“好的,我这边已准备就绪。” [Shake 3] 套接字A:“谢谢你受理我的请求。
-
TCP的粘包问题以及数据的无边界性:https://blog.csdn.net/m0_37947204/article/details/80490512
-
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:断开一个连接。
-
链接的建立:
- 三次握手: