您的位置:首页 > 汽车 > 时评 > 07.16_111期_linux_网络通信

07.16_111期_linux_网络通信

2024/12/21 21:55:20 来源:https://blog.csdn.net/weixin_46366676/article/details/140559725  浏览:    关键词:07.16_111期_linux_网络通信

IP地址 和 Mac地址的区别
IP地址是传输过程中的最终目标
Mac地址是传输过程中的下一个目标,
之所以在当前阶段选择这个Mac地址α,都是因为到达IP地址当前最优的方案是到达Mac地址α

mac地址只是局域网内的唯一地址

数据在到达应用层以后,操作系统应该把这个应用层交给哪个进程?
实际上是通过传输层的端口号就能确定数据最终交给哪个进程
IP + Port是互联网中唯一的一个进程

网络通信的本质就是进程间通信
IP + Port就是socket,那么网络上的两个进程间通信,也可称为socket通信

那么端口号和 进程 pid的区别是什么?
引入端口号有几个优点
1. 引入端口号,实现了实现系统 和 网络的解耦
   这样系统无论怎么修改一个进程的pid,都不会影响网络的传输
2. 只有那些需要网络通信的进程才会携带端口号

一个端口号只能被一台主机内的一个人占用,端口号是16位的

TCP协议 和 UDP协议
TCP协议是有线的可靠传输
UDP协议是无线的不可靠传输

任何主机在传输数据放到网络中时,这个数据一定要按照大端的方式进行读取
即低地址,高字节

程序员在设计套接字的时候,需要调用大小端转换函数
大小端转换函数包括 htonl, htons, ntohl, ntohs

socketaddr结构
socket编程包括以下两类:
1. 网络套接字,底层使用的是 IPV4, 或者 IPV6等等的网络IP协议来实现跨网络通信的
2. UNIX Domain Socket(域间套接字),用来进行本地通信


客户端和服务器都有很多进程,
客户主机上进程的端口号是操作系统随机生成的
也就是说,由于对于任何有 IP 地址机器来说,都不能有相同的端口号
那么客户端往往不会对自己机器上的端口号进行管理,
所以操作系统随机生成,以确保不会生成相同的端口号

那么在客户端中,操作系统是怎么选择端口号的?
    客户端需要 bind 它自己的 IP地址和端口号,但是不需要显示的调用bind函数
    客户端在首次向服务器发送数据的时候,OS会自动给 client bind 它自己的IP和端口

UDP协议 是全双工的
    既可以从套接字中读,也可以向套接字中写
 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com