一、不同体系结构间的互联互通
- 通信本质:不同主机上进程间的通信。通过 IP 标识网络中的一台主机,本质上是 32 位的整型数据;通过端口号标识某个进程,本质上是 16 位的整型数据。
- 网络模型:主要有 C/S(客户端 / 服务器)、B/S(浏览器 / 服务器)、P2P(对等网络)三种。
二、实现编程
-
UDP 编程(C/S 模型):
- 特点:无连接、不可靠。
- 客户端:使用
socket
创建套接字,通过sendto
等函数发送数据。 - 服务器端:将自己的地址公布出去,使用
socket
创建套接字,通过bind
绑定地址,使用recvfrom
接收数据。 recvfrom
函数:从指定的套接字接收数据,并保存发送方的地址信息。成功时返回接收到的字节数,失败时返回 -1。bind
函数:在服务器端将套接字与指定的接口地址关联,用于从该接口接受数据;在客户端可将数据从套接字中取出并从指定接口设备上发送出去。客户端可以省略此函数,由默认接口发送数据。
-
基于 TCP 的编程(C/S 模型):
- 客户端:
- 建立连接:使用
socket
创建套接字(相当于买了一部手机),可选的bind
操作(相当于插上 SIM 卡),然后使用connect
向服务器发起连接请求(相当于拨打电话)。 - 通信过程:使用
read
和write
进行数据读写,最后使用close
关闭连接。
- 建立连接:使用
- 服务器端:
- 建立连接:使用
socket
创建套接字,通过bind
绑定地址,使用listen
监听客户端的连接请求,使用accept
接听客户端的连接请求(这一步完成后连接就建立好了,可以收发数据)。 - 通信过程:使用
read
和write
进行数据读写,最后使用close
关闭连接。
- 建立连接:使用
- TCP 建立连接(三次握手):客户端向服务器发送 “我要和你建立连接” 的请求,服务器回复 “好的,可以建立连接”,客户端再回复 “好”,完成三次握手建立连接。
- 断开连接(四次挥手):客户端向服务器发送 “我要和你断开连接” 的请求,服务器回复 “好的,可以断开”,服务器再发送 “我也要断开” 的请求,客户端最后回复 “好”,完成四次挥手断开连接。
connect
函数:由客户端使用,向目标主机发起连接请求。参数包括本地套接字id
、远程目标主机的地址信息及地址信息长度。成功时返回 0,失败时返回 -1。
- 客户端:
三、地址相关操作
- 绑定地址:主要针对服务器程序,绑定的是服务器所在电脑的 IP 地址。
- 查看地址:在 Linux 下使用
ifconfig
命令查看网卡相关信息(包含 IP 地址);在 Windows 下在 cmd 中使用ipconfig /all
命令查看。