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协议 是全双工的
既可以从套接字中读,也可以向套接字中写