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)    收藏  举报

导航