Bootstrap

C++网络编程-tcpip协议

目录

1 tcp/ip协议族

1.1 体系结构以及主要协议

1.2 封装

1.3 分用

1.4 测试网络

1.5 arp协议工作原理

1.6 dns工作原理

1.7 socket和tcp/ip协议族的关系

2 ip协议详解

2.1 ip服务特点

2.2 ipv4头部结构

2.3 ip分片

2.4 ip路由

3 tcp协议详解

3.1 tcp服务的特点

3.2 tcp头部结构

3.3 tcp连接的建立与关闭

3.4 tcp状态转移

3.5 复位报文段

3.6 tcp交互数据流

3.7 tcp成块数据流

3.8 带外数据

3.9 tcp超时重传

3.10 拥塞控制

4 TCP/IP通信案例:访问web服务器

部署代理服务器

访问dns服务器

本地名称查询

http通信 p60


1 tcp/ip协议族

1.1 体系结构以及主要协议

主要结构:数据链路层、网络层、传输层、应用层(4层结构)

数据链路层:

数据在物理媒介上的传输。

ARP(地址解析协议)、RARP(逆地址解析协议),实现了ip地址和机器物理地址之间的转换

网络层:

  • 数据包的选路和转发:ip协议。

  • ip协议选择下一跳路由器或者目标主机。

  • icmp协议:用于检测网络连接,8位类型+8位代码+16位校验和。

icmp差错报文:回应网络错误。目标不可达(3)、重定向(5)

查询报文:查询网络信息。如ping程序

使用循环冗余校验crc

传输层:

  • 为应用程序提供端到端的通信,主要有tcp、udp、sctp

  • tcp三次握手,可靠的、面向连接的、基于流的服务。

  • udp提供不可靠的、无连接的、基于数据包的服务。

  • sctp流控制传输协议,是为了因特网上传输电话信号而设计的。

应用层:

  • 处理应用程序的逻辑,在内核空间实现

  • ping、telnet、OSPF(最短路径优先)、DNS

1.2 封装

         

  • 发送端应用程序用send、write向tcp写入数据,内核中的tcp模块将数据与tcp内核发送到缓冲区,然后tcp模块调用ip模块的服务,将tcp报文段作为ip的数据部分。

  • udp不保存应用层数据副本,如果要重发就要将用户空间重新拷贝到udp内核发送缓冲区。

  • 帧最大传输单元mtu是46-1500字节,过长的会被分片传输。

1.3 分用

  • 帧到达目的主机后沿着协议自底向上的过程,就是复用。

  • 帧的头部用类型字段标识上层协议 arp、rarp、ip

  • ip数据报头部使用协议字段区分icmp、tcp、udp

  • TCP和udp使用头部的端口号区分上层报文

1.4 测试网络

1.5 arp协议工作原理

实现网络层地址到物理层地址的转换,ip-》mac。

主机向自己所在的网络广播一个arp请求,请求包含目标机器的网络地址。该网络上的其他机器收到后,被要求的机器会回应一个arp应答,包含物理地址。

  • arp请求应答报文

  • arp会维护一个高速缓存,包含经常访问的机器的ip地址到物理地址的映射。

1.6 dns工作原理

使用dns域名访问机器,而不是IP。

dns是分布式的域名服务系统,存有大量的机器名和ip的映射。使用dns协议向服务器查询。

1.7 socket和tcp/ip协议族的关系

  • 数据链路层、网络层、传输层是在内核实现,需要一组系统调用访问这些协议。api主要有:socket和xti。主要使用socket。

  • 功能:1、将应用程序数据从用户缓冲区复制到tcp/udp内核发送缓冲区,交付内核发送数据,如send。或者读取数据;2、通过它修改内核中各层协议的某些头部信息或其他数据结构,控制底层通信。

  • socket是一套网络编程接口,还可以访问其他网络协议栈。

2 ip协议详解

主要讨论:ip头部信息、ip数据报的路由和转发。

2.1 ip服务特点

  • 为上层协议提供无状态、无连接、不可靠的服务。

  • 无状态:上层收到的ip数据报可能是乱序的、重复的。简单、高效。

  • 无连接:不长久地维持对方的任何信息。每次都要指定对方的ip

  • 不可靠:ip协议不能保证ip数据报能准确到达接收端。

2.2 ipv4头部结构

2.3 ip分片

  • 传输过程中可能多次分片,在最终的机器上由ip模块重新组装

  • 以太网帧的MTU是1500字节,头部占用20字节,最多携带1480字节。

2.4 ip路由

IP协议的核心任务:数据包的路由,决定发送数据报到目标机器的路径。

  • ip模块工作流程:

  • 路由机制:

  • 路由表更新:

  • IP转发:

  • 重定向:

  • ipv6

3 tcp协议详解

关注:tcp头部信息、tcp状态转移过程、tcp数据流、tcp数据流的控制。

3.1 tcp服务的特点

  • 面向连接的、字节流、可靠传输

  • 一对一的,广播多播不适合使用tcp,可以使用udp

  • 面向字节流:写端多次写的会在缓冲区一次性发出;读端会将所有报文放到缓冲区通知应用程序读取。应用程序的读写次数和tcp模块的接收次数没有关系。

  • udp是每一次写操作都有一个udp数据包发送。接收端要及时每一次对一个udp进行读操作,否则会丢包。

3.2 tcp头部结构

  • 固定头部结构

  • 头部选项

3.3 tcp连接的建立与关闭

  

半关闭状态:当read系统调用返回0时即确认关闭。socket通过shutdown提供对半关闭的支持。

 连接超时

3.4 tcp状态转移

 

  • TIME_WAIT状态:客户端在接收到结束报文后等待2MSL(报文段最大生存时间)再完全关闭。可靠的终止tcp连接、保证让迟来的tcp报文段有足够的时间被识别丢弃(防止某端口又有新的连接进来导致报文被接收)。

  • 可以通过socket的SO_REUSEADDR强制进程立即使用处于TIME_WAIT状态的端口

3.5 复位报文段

某些情况会发送RST标志的报文段,通知关闭连接或重新建立连接。

  1. 访问不存在的端口

  2. 异常终止连接:发送后,发送端所有排队等待发送的数据都会被丢弃,使用socket的SO_LINGER

  3. 处理半打开连接:一端已经关闭了,另一端还维持着原来的连接。

3.6 tcp交互数据流

tcp报文段包含的应用程序数据按照长度分为交互数据和成块数据。交互数据只有很少的字节,对实时性比较高,如ssh、telnet。

一般可能会导致拥堵,可以使用nagle算法。通信双方任意时刻最多只能发送一个没被确认的TCP报文段。

3.7 tcp成块数据流

如FTP传输大文件,由于吞吐量大,tcp使用滑动窗口协议,允许发送方在停止发送前和等待确认前连续发送多个分组。即滑动窗口

3.8 带外数据

用于迅速告诉对方本端发生的重要事件。

  • udp没有带外数据。TCP利用头部的紧急指针标志和紧急指针字段,提供了紧急方式。

3.9 tcp超时重传

  • tcp模块为每个tcp报文段维护一个重传定时器,在报文段第一次被发送时启动,未收到应答就重新发送并重置定时器。

3.10 拥塞控制

  • 慢启动、拥塞避免、快速重传、快速恢复。

4 TCP/IP通信案例:访问web服务器

  • web客户端和服务器之间使用http通信。

部署代理服务器

  • 代理服务器分为正向、反向、透明代理器

    正向代理由客户端设置,请求发送到代理服务器;反向代理由服务端设置,由代理服务器转发到内部网络的服务器上;透明代理设置在网关,对于用户来说是透明的,因此属于正向代理的一种。

    通常会提供缓存目标资源的功能,如squid、varnish等软件

  • 代理服务器访问dns服务器查ip、代理服务器查询路由器mac地址和arp请求应答、wget客户端和代理服务器之间的http、代理服务器和web服务器之间的http

访问dns服务器

本地名称查询

http通信 p60

cookie

;