博客
关于我
2-1:套接字(Socket)编程之必备知识
阅读量:615 次
发布时间:2019-03-12

本文共 1251 字,大约阅读时间需要 4 分钟。

文章目录

仔细观察可以发现,主机与主机完成网络通信本质其实进程间通信,例如我们使用QQ相互发送消息以及访问百度服务器查询关键词等等。

对于同一台主机的两个进程,要完成通信,方法有很多种,例如管道,共享内存等。而不同主机的两个继承想要完成通信则必须要通过网络,其中有一个非常关键的问题就是如果把一个主机的数据发送到另一个数据,这就需要IP地址,发送过去之后,一个主机上又有可能运行多个进程,如何准确让QQ这个进程接受呢,这就需要端口号所以说,IP+端口号标识了全网唯一的进程

在这里插入图片描述

(1)IP地址和端口号

A:源IP地址和目的IP地址

前文说过:IP地址用于标识公网中某一个台主机

在这里插入图片描述

所以它能确保数据准确发送给目的主机

B:端口号

在传输层中也有类似于IP地址和MAC地址的概念,它就是端口号,端口号用来确定应该将数据交付给哪一个应用程序

在这里插入图片描述
我们都知道所有进程都需要一个PID来进行表示,但是不是所有的进程都是网络进程,所以不是所有进程都需要端口号。
同时一个进程可以绑定多个端口号(就像学生在学校可以有学号,在健身房可以有会员号),但是一个端口号不能被多个进程绑定

(2)TCP

为了实现数据的可靠传输,需要考虑很多的事情,比如数据是否被破坏,丢包以及分片顺序混乱等问题

所以TCP通过校验和,序列号确认应答,重发控制,连接管理以及窗口控制等机制实现可靠性传输

在这里插入图片描述

(3)UDP

UDP和TCP不一样,它不提供复杂的控制机制,它的主要职责就是发送,数据丢包不丢包,接受没有接受和它没有一点关系

(4)网络字节序

我们知道数据才内存中存放时有大端和小端之分

在这里插入图片描述
而在网络数据流中,也有大小端之分。TCP/IP协议规定,网络数据流应该采用大端字节序,即低地址高字节

无论一台主机是大端还是小端机,都要按照这个规定来发送数据,如果当前主机是小端就要将小端转为大端,然后从内存的低地址到高地址发送数据,接收方也是按照从低到高的顺序接受

在这里插入图片描述

这样做很大的优点就是数据在传输的同时就可以做运算了,如果是小端的话就必须要等待所有数据全部就为了才可以开始操作

所以为了更加方便操作,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表示hostn表示networkl表示32位长整数,s表示16位短整数
  • 如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回;如果是大端字节序则不作修改,直接返回

转载地址:http://uarxz.baihongyu.com/

你可能感兴趣的文章
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>
mysql 实现主从复制/主从同步
查看>>
mysql 审核_审核MySQL数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>
mysql 将null转代为0
查看>>
mysql 常用
查看>>
MySQL 常用列类型
查看>>
mysql 常用命令
查看>>
Mysql 常见ALTER TABLE操作
查看>>
MySQL 常见的 9 种优化方法
查看>>
MySQL 常见的开放性问题
查看>>
Mysql 常见错误
查看>>
MYSQL 幻读(Phantom Problem)不可重复读
查看>>
mysql 往字段后面加字符串
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>