3、网络通信基础:tcp、ip、套接字
源IP地址、目标IP地址的报文,在互联网上的两台主机之间通信,是不需要转化的。
两台主机之间的通信,是通过两台主机的MAC地址进行通信的,MAC地址的报文在经过路由层、交换层等,是需要不断转化的(MAC地址的报文,需要不断的包装)。
传输层,提供进程地址(端口):
- tcp:Transmission Control Protocol,传输控制协议,面向连接的协议;通信前需要建立虚拟链路(三次握手);结束后拆除虚拟链路。tcp可用的端口,0-65535
- udp:User Datagram Protocol,用户数据报协议,无连接的协议;通信前不需要建立虚拟链路。udp可用的端口,0-65535
- 0-1024:著名端口,特权端口,只有管理员可以使用。
- 1024-41951,分配给程序注册为某应用使用,常用程序的端口:11211--memcached,3306--mysql
- 41952+:动态端口,私有端口,客户端程序随机使用的端口。其范围的定义在:/proc/sys/net/ip_local_port_range
网络层,提供IP地址:
套接字socket:允许位于不同主机或同一主机上的不同进程之间进行通信,完成数据交换;是IPC(进程间通信)的一种实现。
socket通信有三种类型:
- tcp:SOCK_STREAM:tcp套接字
- udp:SOCK_DGRAM:udp套接字
- 裸套接字:SOCK_RAW
tcp、udp对socket套接字的进行了封装;没有经过tcp、udp封闭,直接通过套接字进行的通信,就是裸套接字通信。
IPV4分类,ABC三类地址可以互联网上通信:
- A 1-127
- B 128-191
- C 192-223
- D 组播,224-239
- E 240-254
私有地址:
- A: 10.0.0.0、8
- B:172.16.0.0/16 -- 172.31.0.0/16
- C: 192.168.0.0/24 -- 192.168.255.0/24
在不同主机间通信时,不仅要经过传输层,还要通过网络层IP,可以认为套接字,就是IP地址,加上端口的组合。
在同一台主机进程间通信时,经过传输层,但不必经过网络层IP。
查看正在使用的套接字:
ss -tan
TCP协议的特性:
- 建立连接:三次握手
- 将数据打包(分解)成段:校验和(CRC-32算法)
- 确认、重传以及超进:
- 排序:逻辑序号
- 流量控制:滑动窗口算法
- 拥塞控制:发送方使用慢启动的方式和拥塞避免算法
socket domain套接字域(根据使用的IP地址划分):
- AF_INET:address family,指的IPV4
- AF_INET6:IPV6
- AF_UNIX:同一主机上的不同进程间进行通信时,使用AF_UNIX,不必经过网络IP层。
以上的三类套接字,都至少提供了两种socket:流、数据报
- 流:可靠地传递、面向连接、无边界
- 数据报:不可靠地传递、无连接、有边界
套接字相关的系统调用:
- socket():创建一个套接字,向内核申请
- bind():绑定一个套接字
- listen():监听在一个套接字
- accept():接收请求
- connect():客户端请求连接建立
- write():写数据到缓冲中(套接字文件中),即发送数据
- read():从缓冲中接收数据(套接字文件中),即接收数据
- send()、recv()、sendto()、recvfrom():发送与接收数据
posted on 2019-02-26 20:23 myworldworld 阅读(588) 评论(0) 收藏 举报