本文共 1251 字,大约阅读时间需要 4 分钟。
仔细观察可以发现,主机与主机完成网络通信本质其实进程间通信,例如我们使用QQ相互发送消息以及访问百度服务器查询关键词等等。
对于同一台主机的两个进程,要完成通信,方法有很多种,例如管道,共享内存等。而不同主机的两个继承想要完成通信则必须要通过网络,其中有一个非常关键的问题就是如果把一个主机的数据发送到另一个数据,这就需要IP地址,发送过去之后,一个主机上又有可能运行多个进程,如何准确让QQ这个进程接受呢,这就需要端口号 。所以说,IP+端口号标识了全网唯一的进程
前文说过:IP地址用于标识公网中某一个台主机
所以它能确保数据准确发送给目的主机
在传输层中也有类似于IP地址和MAC地址的概念,它就是端口号,端口号用来确定应该将数据交付给哪一个应用程序
为了实现数据的可靠传输,需要考虑很多的事情,比如数据是否被破坏,丢包以及分片顺序混乱等问题
所以TCP通过校验和,序列号确认应答,重发控制,连接管理以及窗口控制等机制实现可靠性传输
UDP和TCP不一样,它不提供复杂的控制机制,它的主要职责就是发送,数据丢包不丢包,接受没有接受和它没有一点关系
我们知道数据才内存中存放时有大端和小端之分
无论一台主机是大端还是小端机,都要按照这个规定来发送数据,如果当前主机是小端就要将小端转为大端,然后从内存的低地址到高地址发送数据,接收方也是按照从低到高的顺序接受
所以为了更加方便操作,C中也提供了相应的接口以供主机字节序和网络字节序间的转换
#include/* 32位整数从主机字节序转换为网络字节序 */uint32_t htonl(uint32_t hostlong);/* 16位整数从主机字节序转换为网络字节序 */uint16_t htons(uint16_t hostshort);/* 32位整数从网络字节序转换为主机字节序 */uint32_t ntohl(uint32_t netlong);/* 16位整数从网络字节序转换为主机字节序 */uint16_t ntohs(uint16_t netshort);
h
表示host
,n
表示network
,l
表示32位长整数,s
表示16位短整数转载地址:http://uarxz.baihongyu.com/