一、TCP/IP协议概况
IPv4 网际协议版本4
使用32位地址,它给TCP、UDP、SCTP、ICMP和IGMP提供分组递送服务。
IPv6 网际协议版本6
主要变化时使用128位地址,它给TCP、UDP、SCTP、IGMPv6提供分组递送服务。
TCP 传输控制协议
TCP是一个面向连接的协议,为用户进程提供可靠的全双工字节流。它是一种流套接字,关心确认、超时、和重传之类的细节。
UDP 用户数据报协议
UDP是一个无连接协议,它是一种数据报套接字,不能保证最终到达它们的目的地。
SCTP 流控制传输协议
SCTP是 一个提供可靠的全双工关联的面向连接的协议,是多宿的,提供消息服务。
ICMP 网际控制消息协议
ICMP处理在路由器和主机之间流通的错误和控制消息。
IGMP 网际组管理协议
IGMP用于多播。
ARP 地址解析协议
ARP把一个IPv4地址映射成一个硬件地址。
RARP 反向地址解析协议
RARP把一个硬件地址映射成一个IPv4地址,有时用于无盘节点的引导。
ICMPv6 网际控制消息协议版本6
ICMPv6综合了ICMPV4、IGMP和ARP的功能。
BPF BSD分组过滤器,
该接口提供对于数据链路层的访问能力,通常可以在源自Berkeley的内核中找到。
DLPI 数据链路提供者接口
该接口也提供对于数据链路层的访问能力,通常随SVR4内核提供。
二、TCP连接的建立和终止
1、三路握手
(1)服务器必须准备好接受外来的连接。通常通过调用scoket、bind和listen这3个函数来完成,我们称之为被动打开。
(2)客户通过调用connect发起主动打开。这导致客户TCP发送一个SYN分节,它告诉服务器将在(待建立)连接中的数据的初始序列号。
通常SYN分节不携带数据,其所在的IP数据报只含有一个IP首部、一个TCP首部及可能有的TCP选项。
(3)服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送的数据的初始序列号。
服务器在单个分节中发送SYN和对客户的SYN的ACK(确认)。
(4)客户必须确认服务器的SYN。
2、TCP选项
MSS选项
发送的SYN的TCP一端使用本选项通告对端它的最大分节大小即MSS。
窗口模式选项
TCP连接任何一端能够通告对端的最大窗口大小是65535,因为在TCP首部中相应的字段占16位。
然而高速网络连接或长延迟路径要求有更大的窗口以获得尽可能大的吞吐量。这个新选项指定TCP首部中的通告窗口必须扩大(即左移)的位数(0~14),因此所提供的最大窗口接近1GB(65535*2的14次方)。
在一个TCP连接上使用窗口规模的前提是它的两个端系统必须都支持这个选项。
时间戳选项
这个选项对于高速网络连接是必要的,它可以防止失而复现的分组可能造成的数据损坏。
3、TCP连接的终止
(1)某个应用进程首先调用close,我们称该端执行主动关闭。
该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2)接收到这个FIN的对端执行被动关闭。
这个FIN由TCP确认。它的接收也作为一个文件结束符传递给接收端应用进程,因为FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3)一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。
这导致它的TCP也发送一个FIN。
(4)接收这个最终FIN的原发送端TCP确认这个FIN。
4、TCP状态转换图
5、TCP连接的分组交换
6、TIME_WAIT状态
TIME_WAIT状态有两个存在的理由:
(1)可靠的实现TCP全双工连接的终止
(2)允许老的重复分节在网络中消逝
7、端口号
(1)众所周知的端口为0~1023.
这些端口由IANA分配和控制。可能的话,相同端口号就分配给TCP、UDP和SCTP的同一给定服务。
(2)已登记的端口为1024~49151.
这些端口不受IANA控制,不过由IANA登记并提供他们的使用情况清单,以方便整个群体。可能的话,相同端口号也分配给TCP和UDP的同一给定服务。
(3)49152~65535是动态的或私用的端口。
IANA不管这些端口它们就是我们所称的临时端口。
8、套接字对
一个TCP连接的套接字对时一个定义该连接的两个端点的四元组:本地IP地址、本地TCP端口号、外地IP地址、外地TCP端口号。套接字对唯一标识一个网络上的每个TCP连接。
标识每个端点的两个值(IP地址和端口号)通常称为一个套接字。
9、缓冲区大小及限制
IPv4数据报的最大大小是65535字节,包括IPv4首部
IPv6数据报的最大大小是65575字节,包括40字节的IPv6首部
(1)TCP输出
每一个TCP套接字有一个发送缓冲区,我们可以使用SO_SNDBUF套接字选项来更改该缓冲区的大小
(2)UDP输出
任何UDP套接字都有发送缓冲区大小(我们可以使用SO_SNDBUF套接字选项更改它),不过它仅仅是可写到该套接字的UDP数据报的大小上限。
10、标准因特网服务
11、常见因特网应用的协议使用
OSPF通过原始套接字直接使用IP,RIP使用UDP,BGP使用TCP。