套接字理解
- socket学习 == 计算机之间如何通信
- socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 网络编程就是用代码将两台电脑交换数据,操作系统提供了socket来编写传输程序,不同的硬件设备都被看成一个文件,每个文件linux会给它分配一个id,即文件描述符,
通过socket来创建一个网络连接,即 打开一个网络文件,socket()返回值就是文件描述符, - 套接字有多种,我们常用的是internal套接字, internal套接字分为多种数据传输方式,常用的两种
- 两台套接字之间的通信,相当于两个套接字间的通信;
流格式套接字 (面向连接套接字)
(Strem Sockets) 用SOCK_STREAM表示 小写sock_stream
【1】特征:
- 数据在传输过程中不会消失;
- 数据是按照顺序传输的;
- 数据的发送和接收不是同步的;
【2】理解
- 流格式套接字的内部有一个缓冲区(也就是字符数组),通过 socket 传输的数据将保存到这个缓冲区。接收端在收到数据后并不一定立即读取,只要数据不超过缓冲区的容量,接收端有可能在缓冲区被填满以后一次性地读取,也可能分成好几次读取。
- 传送端有自己的节奏,接收端也有自己的节奏,它们是不一致的。http 协议就基于面向连接的套接字
- TCP(传输控制协议)会控制你的数据按照顺序到达没有错误,保证数据的正确性;
- IP(网络协议)会控制数据如何从源头到达目的地,即路由;
【3】总结
- SOCK_STREAM 是一种可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送。
数据报格式套接字(无连接套接字)
(Datagram Sockets) 用SOCK_DGRAM表示 小写sock_dgram
【1】特征
1.强调快速传输而非传输顺序;
2.传输的数据可能丢失也可能损毁;
3.限制每次传输的数据大小;
4.数据的发送和接收是同步的;
【2】理解
1.数据报套接字也使用 IP 协议作路由,但是它不使用 TCP 协议,而是使用 UDP 协议(User Datagram Protocol,用户数据报协议)
2.计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。
【3】总结
1.数据报套接字是一种不可靠的、不按顺序传递的、以追求速度为目的的套接字。
总结
- 无连接套接字传输效率高,但是不可靠,有丢失数据包、捣乱数据的风险;
- 有连接套接字非常可靠,万无一失,但是传输效率低,耗费资源多。