目录
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标志的报文段,通知关闭连接或重新建立连接。
-
访问不存在的端口
-
异常终止连接:发送后,发送端所有排队等待发送的数据都会被丢弃,使用socket的SO_LINGER
-
处理半打开连接:一端已经关闭了,另一端还维持着原来的连接。
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