目录

Socket网络编程详解

Socket网络编程详解

Socket简介

https://s2.loli.net/2022/01/12/DoTLUd6Zef7W5hY.png

上图表示的是国际标准化组织(ISO)的计算机通信开放系统互连(OSI)模型;

1、2层随系统提供的设备驱动和网络硬件实现,一般不必关心,网络层 IPv4 或者 IPv6,传输层可以选择 TCP 或者 UDP,OSI 上面的 3 层合并为一层应用层,我们使用的套接口就是应用层到传输层的接口,主要介绍如何使用套接口编写使用 TCP 或者 UDP 的网络应用程序,其实可以绕过传输层,应用直接使用 IPv4 或者 IPv6,称为原始套接口(raw socket);

上三层(应用层)处理应用程序(如FTP、telnet、HTTP)的细节,不知道通信细节;下四层则不知道应用程序,但能处理所有的通信细节,发送数据、等待确认、给无序到达的数据排序、计算与验证校验和等等;

上三层通常形成用户进程,而下四层通常作为操作系统内核的一部分。

UDP 是英文 UserDatagramProtocol 的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用 UDP 协议。UDP 协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP 仍然不失为一项非常实用和可行的网络传输层协议。

UDP 和 TCP 的主要区别是两者在如何实现信息的可靠传递方面不同。TCP 中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。

UDP 并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把 UDP 协议称为不可靠的传输协议。

相对于 TCP,UDP 的另外一个不同之处在于如何接收突法性的多个数据报。不同于 TCP,UDP 并不能确保数据的发送和接收顺序,事实上,UDP 协议的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才有可能发生 。

UDP 具有 TCP 所望尘莫及的速度优势 ,TCP 中植入了各种安全保障功能,在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。UDP 由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

只有理解了某些特性,才能更容易的编写更健壮的客户、服务器程序,netstat 工具是调试客户、服务程序最好的工具,tcp 的三路握手、tcp 的连接终止序列、tcp 的 time_wait 状态、套接口的缓冲机制等。

总结:UDP是一种简单的、不可靠的数据报协议;TCP是一种精致的、可靠的字节流协议

TCP通信

TCP简介

  • TCP 提供客户与服务器的连接;
  • TCP 提供可靠性;
  • TCP 通过给所发送数据的字节关联一个序号进行排序;
  • TCP 提供流量控制;
  • TCP 的连接是全双工的。(全双工?半双工?单工?

一个TCP客户建立与一个给定的服务器的连接,跨越连接与那个服务器交换数据,然后终止连接;

当TCP向另一端发送数据时,它要求对方返回一个确认。如果没有收到确认,自动重传数据并等待更长时间,在数次重传失败后才放弃;

TCP总是告诉对方它能够接收多少字节的数据,叫通告窗口;

在给定的连接上应用进程在任何时刻既可以发送也可以接收数据。

TCP三次握手