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

相关推荐

  1. 07.14_111_linux_网络通信

    2024-07-20 13:30:04       23 阅读
  2. 07.16_111_linux_网络通信

    2024-07-20 13:30:04       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 13:30:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 13:30:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 13:30:04       87 阅读
  4. Python语言-面向对象

    2024-07-20 13:30:04       97 阅读

热门阅读

  1. 我为什么要使用Vim编辑器?

    2024-07-20 13:30:04       23 阅读
  2. 微服务概念篇-服务提供者/服务消费者

    2024-07-20 13:30:04       22 阅读
  3. 后端配置了相关字段后的前端跨域处理

    2024-07-20 13:30:04       27 阅读
  4. IP地址:由电脑还是网线决定?

    2024-07-20 13:30:04       22 阅读
  5. 【AI工具基础】—B树(B-tree)

    2024-07-20 13:30:04       26 阅读
  6. spring-gateway整合swagger2统一微服务接口文档

    2024-07-20 13:30:04       23 阅读
  7. 定个小目标之刷LeetCode热题(45)

    2024-07-20 13:30:04       26 阅读
  8. 人工势场法路径规划算法

    2024-07-20 13:30:04       24 阅读
  9. Android笔试面试题AI答之Activity(2)

    2024-07-20 13:30:04       23 阅读