IP地址+端口号就叫套接字,用于定位主机中的一个进程
- 我们在系统编程部分学过管道,管道是用于同一主机下不同进程间的通信
- 套接字则用于不同主机之间的通信,由套接字定位需要通信的进程
网络五元组信息
一条网络数据一定包含5部分信息
源IP地址 | 表示该条消息来自哪个机器 |
---|
源端口 | 表示该条消息来自于哪个端口 | 目的IP地址 | 表示该条消息去哪个机器 | 目的端口 | 表示该条消息去哪个进程 | 协议 | 双方网络数据采用的具体网络协议 |
UDP简单的特性
1.无连接:
- UDP客户端给服务端发送消息时,不需要和服务端先建立连接,直接发送
- 也就是说客户端不知道服务端是否在线,是否在工作,只进行发送,不关心是否能到服务端
2.不可靠
- UDP并不会保证数据是可靠有序到达对端
- 也就是说多次发送的信息可能是无序的
3.面向数据报
- UDP不管是和应用层还是网络层进行数据传递的时候都是整条数据交互的
- 也就是说,UDP是传输层协议,上面是应用层,下面是网络层;
- 要想使用UDP发送数据,我们在应用层调用UDP发送接口;
- 把数据给传输层的UDP协议后,该协议会在传输层打上UDP数据包头,即刻将数据给网络层;
- 不会等待下一条数据和上一条数据一起处理
TCP简单特性
1.面向连接
- 通信双方在发送数据之前,必须先建立连接,再进行发送
2.可靠传输
- 保证数据是可靠并且有序的到达对端
- 有序的意思是数据到达应用层是有序的,当后边数据先到达,它会等待前边的数据
3.面向字节流
- 多次发送的数据在网络传输过程当中没有明显的数据边界;
- 例如先发送123,再发送456,123和456中间是没有间隔的;
- 如果该数据之间传输到对端,接收端拿到123456时,它是无法通过原生数据区分是先发12还是再发3456的;
- 将这种没有明显间隔的数据称为TCP粘包问题(后续讲解)
网络字节序
先回顾C语言阶段我们学过小端字节序和大端字节序;
网络字节序出现的原因:
- 因为数据在物理层传输时是二进制形式,数据通过网络进入机器后,需要在网络层解析一遍,机器也要解析一边;
- 规定在网络层以大端字节序解析,对于机器使用大小端字节序解析均可;
- 如果是小端字节序的机器不经过转换,传输到网络后到达对端,因为解析的不同会导致数据错误;
- 网络中规定了字节序后,网络设备就能依据网络传输数据中的IP和端口进行传输;
交换机,路由器之所以能转发数据,需要知道该数据到哪一台机器中去,就需要解析该数据
主机字节序:指当前机器的字节序
这两种字节序就一定牵涉到网络当中,IP和端口的主机字节序与网络字节序的相互转换
|