《用TCP/IP进行网际互联》学习笔记1 - 协议部分

来源:互联网 发布:悠悠互娱网络电玩城 编辑:程序博客网 时间:2024/06/12 01:18

《用TCP/IP进行网际互联》 by Douglas E. Comer

1 引言与概述

1.         TCP/IP internet protocol suite,也叫做TCP/IP协议栈。它给应用程序提供两大类服务:1)无连接分组交付(Connectionless Packet Delivery Service),单独传递每个分组,不保证有序、可靠,但是效率高;2)可靠的数据流运输服务(Reliable Stream Transport Service),它比前者提供更多的服务,可靠,面向连接。

2.         套接字(Socket)是操作系统抽象,使得程序员更加容易的使用TCP/IP协议。是事实标准。

 

2 底层网络技术的回顾

1.         因特网不是一个新的物理网络,它是一种将物理网络互连的方法以及一组使用网络的协议。TCP/IP协议是极其灵活的,几乎所有的底层技术都可以用于传送TCP/IP通信流。

2.         网络通信分成两种类型:面向连接的(电路交换),无连接的(分组交换)。面向连接的:保证容量,开销大。无连接的:多路通信并行,带宽被共享。

3.         以太网的性质:支持广播,共享总线;尽最大努力交付;有分布式接入控制。由于共享总线,所以所有网点的每次传输的数据都可以传输到所有网点。

4.         以太网没有中央机构控制,而是使用带碰撞检测的载波监听多点接入(CSMA/CD)来控制发送。

5.         802.11b = Wi-Fi802.11a802.11g802.16 = Wi-Max802.11n = 无线;802.11i = 安全无线。

6.         以太网接口硬件的物理地址(硬件地址,MAC地址),48bit6字节),它是可以改变的。接口地址可以配置为多播地址、任意一个物理地址、或者所有分组(混杂模式,用于sniff嗅探)。

7.         以太网帧(Frame)最小64byte,最大1518byte。以太网帧是自识别的,也就是说,单一计算机上可以同时使用多个协议,单一物理网络上可以使用多个协议。以太网帧结构:

前同步码

目的地址  

源地址  

类型    

数据            

FCS  

8 byte

6 byte

6 byte

2 byte

46~1500 byte

4 byte

8.         Modem或者DSL实现了桥接,连接了多个以太网。

 

3 网际互联的概念和结构模型

1.         互联网希望是多个网络集合起来成为一个大的网络,而保持与下层网络技术以及目的机器的无关性,隐藏了物理网络的细节。也就是说,TCP/IP协议把所有网络都看成是相同的,无论是主干网、以太网局域网还是点到点链路。

2.         把两个网络互联起来并在他们之间传递分组的计算机称为网关或路由,路由这个词目前比较常用。

 

4 分类的因特网地址

1.         最初的分类编址方案:TCP/IP互联网上的每个机器有一个32bit地址,用于与该主机的所有通信中。

2.         五类地址,他们是自标志的,也就是说,根据地址自身就知道前缀(网络号)和后缀(主机号)的边界。

         

3.         特殊地址:全0地址用于主机需要通信但还不知道自己的地址。127.0.0.0用于测试TCP/IP和本机进程间的通信;这样,网络号是127的分组不可能出现在网络上。

4.         网络字节顺序,采用的是Big EndianIntel PC机采取Little Endian。所以数据传输的时候要做转换。

 

5 因特网地址到物理地址的映射(ARP

1.         ARPAddress Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的低层协议,负责将某个IP地址解析成对应的MAC地址。知道了同一个网络上的某目的主机的IP地址,就可以使用ARP找到该目的机器的物理地址。

2.         当主机A要和主机B通信(如主机A Ping主机B)时。主机A会先检查其ARP缓存内是否有主机BMAC地址。如果没有,主机A会发送一个ARP请求广播包,此包中含有主机AIP地址/MAC地址对,也含有主机BIP地址。当主机B收到此广播后,会将自己的MAC地址利用ARP响应包传给主机A,并更新自己的ARP缓存,即同时将主机AIP地址/MAC地址对保存起来,以供后面使用。主机A在得到主机BMAC地址后,就可以与主机B通信了。同时,主机A也将主机BIP地址/MAC地址对保存在自己的ARP缓存内。

3.         如果所有的网络硬件都能够识别IP地址的话,那么ARP就是无用的。所以ARP看成是物理网络系统的一部分,而不是互联网协议的一部分,它是一个隐藏底层物理网络编址并运行给每台机器分配任意IP地址的底层协议。

4.         机器启动的时候,检查是否有IP冲突,方法就是向自己机器的IP地址发送一个ARP请求。

5.         ARP协议可能会有危险,即网络上有人冒充目的IP,这样就可以接收到本来不会发送给这台机器的信息。

6.         RARPReverse ARP)是根据MAC地址生成IP地址的协议,现在已经不使用,代替的是DHCP

 

6  IP:无连接数据报交付(IPv4

1.         本章描述IP的静态一面;下一章介绍动态一面:转发;再下一章介绍IP的错误处理。

2.         网际协议(IP)特征:不可靠的Unreliable、尽最大努力交付的Best-effort delivery、无连接交付connectionless系统。

3.         IP协议的目的:1)它定义了在整个TCP/IP互联网中使用的数据传送基本单元和确切格式;2IP软件完成转发功能,选择分组发送的规则;3IP还包含了一组体现不可靠分组交付思路的规则:产生和处理差错报文、丢弃分组等。

4.         IP数据报的格式,它不规定数据区的格式,可以传送任意数据。数据报总长度<64K

 

5.         发送数据时,IP数据报被封装到以太网帧中。以太网帧最大传输单元(MTU)是1500IP规范要求数据报最小值为576,且不小于所连网络中最大MTU的值。

6.         如果数据报大小比较大的话,路由器会进行分片fragmentation.分片之后,丢失、延迟的概率增加,并且增加了目的端的组装时间。

 

7  IP:转发IP数据报

1.         IP路由器(router)的主要作用是做出IP转发决策。转发(forwarding)和路由选择(routing)是同一个意思,就是为分组选择发送路径的过程;它分为两类:直接交付(两台机器处于同一个物理传输系统时),间接交付(不在同一个网络)。

2.         可以直接交付时传输IP数据报与router没有关系,他只是使用ARP进行映射就可以找到直接的目的地。

3.         间接交付使用IP路由表(IP转发表),IP路由表含有许多对(N,R),其中N目的网络IP地址(我们没有必要将目的主机地址放在路由表中,只要将目的主机所在网络的IP地址放在路由表中,就可以完成下一跳转发),R是通过网络N的路径上“下一个”路由器的IP地址。路由器R称为下一跳,这种转发称为下一跳转发。路由器只指明了从它到某个目的网络的路径上的下一步——路由器并不知道目的站的完整路径。

4.         所以,机器M的路由表中列出的所有路由器都必须在与M直接相连的网络上。

5.         路由表的大小取决于互联网中网络的数量;而不是主机的数量。但互联网中网络的数量也是相当大的。

6.         IP转发算法

从数据报中抽取目的IP地址D

if 表中有D的一个特定主机路由

   把数据报发送到表中指明的下一跳,然后退出;

 

计算地址D的网络前缀N

if N与任何一个直接相连的网络地址匹配

   通过该网络把数据报交付给目的站D

   (包括把D解析成一个物理地址,封装数据报并发送帧)

 

else if 表中包含一个针对网络D的路由

   把数据报发送到表中指明的下一跳;

 

else if 表中包含一个默认路由

   把数据报发送到表中指明的默认路由器;

else 声明一个转发差错;

7.         路由器会转发所有给他的数据报,但是主机严禁转发偶尔错误转发给他的数据报。因为:1)原本已经有错误,但是主机转发之后会把这种错误掩盖;2)主机转发会造成多余的网络通信量;3)简单的错误会引发混乱,比如广播了(应该是直接发送)到主机H的数据报,那么所有的其他主机都会向H转发;4)路由器有更多的功能,比如差错。

 

8  IP:差错与控制报文(ICMP

1.         ICMP全称Internet Control Message Protocol(网际控制信息协议),每个IP实现中必须包括它。

2.         ICMP报文被放在IP数据报的数据部分,通过互联网传送。ICMP最终的目的地是机器上的网际协议软件,当一个ICMP报文到达后,ICMP软件模块对它进行处理。

3.         数据报的错误大多数产生于路由器。当数据报产生差错时,ICMP只能向数据报的最初源站报告错误情况;而谁都无法知道中间路由器是否出了问题。

4.         即使ICMP报文是使用IP封装和发送的,也不要把它当成高层协议。ICMPIP的一个必要组成部分。它和普通的IP数据报都是可以用路由器来处理的,它们同属网际互联层。

5.         每个ICMP的报文都有自己的格式。但它们开头的三个字段都是相同的:

一个8位整数报文类型(TYPE)字段来标识报文;

一个8位代码(CODE)字段提供有关报文类型的更多信息;

一个16位检验和(CHECKSUM)字段;

此外,用于报告差错的ICMP报文总是包括从产生问题的数据报中取出来的首部和一些八位组。它包含产生问题的数据报中的一些八位组的原因是:让接收方更准确第判断是那个(些)协议以及哪个应用程序负责该数据报。

6.         ICMP报文有几种类型:1)测试目标可达和状态:0回送应答(ping回答)/ 8回送请求(ping请求);2)目的站不可达;3)源站抑制(因为拥塞,就是发的比收的或者转的快);4)来自路由器的改变路由请求;5)循环或者过长的路由;6)其他问题;7)时钟同步或者传输时间估计

 

9  无分类和子网编址方案(CIDR

1.         前面介绍过ABC类地址。为了节省网络前缀,进行四种扩展:代理ARP子网编址、点对点、无分类编址

2.         代理ARP允许两个网络共享一个IP 网络地址。路由器R知道主机的分布,用ARP 来维持该网络,并造成只有一个网络的假象。当主机H1 要和主机H4 通信时,它首先运行ARP ,把H4 IP 地址映射到一个物理地址上。一旦有了一个物理地址,H1 就可以把数据报直接发送到这个物理地址上。它的局限:两个网络都必须使用ARP进行解析。

3.         子网编址是三种技术中应用得最为广泛的一种,它已被标准化,是TCP/IP的一部分,是IP 编址的一个必须部分。各个网点都有修改地址和路由的自由,只要这个修改对其他网点不可见。子网编址就是:32IP 地址有一个网络部分和一个本地部分,其中互联网部分标识某个场点,它可能有多个物理网络;本地部分标识一个物理网络和在该场点的主机。这样,原来的地址是互联网部分+本地部分;现在,本地部分=物理网络+主机。

4.         子网编址分为固定划分子网和变长划分子网。所谓的变长,其长度值不随着时间的变化而变化,一点网络选定了一种划分方法之后,该划分就不能改变。但变长的容易二义性,所以不推荐使用。

5.         子网技术,需要使用子网掩码,该掩码把IP地址中的一些(不一定是多少)byte看成是网络前缀部分,另一些是主机后缀。

6.         无分类编址的缘由:1)有类别划分地址的方案没有把网络地址平等地分成三类。尽管有不多于1 7 千多个B 类地址可以分配,但是却有多于200 万个C 类网络地址存在;2)申请C 类地址的速度较慢,仅有少量地址被分配;3)以B 类地址分配速度,几年之内所有的地址都将用完。

7.         无分类编址Classless inter-domain routingCIDR),允许网络前缀具有任意长度。CIDR可以看成是多个C类地址代替一个B类地址,就是按需分配。掩码的记法:128.211.168.0/21:前面21bit是网络部分。而/8,/16,/24就是传统的ABC

8.         总之,ISP所使用的无类别编址将IP地址作为任意整数对待,允许网络管理者以连续块划分开,来分配地址,块中的地址数量是2的幂。

9.         为专用网络(private network,局域网)保留的CIDR块:

前缀

10.0.0.0/8

172.16.0.0/12

192.168.0.0/16

169.254.0.0/16

最低地址

10.0.0.0

172.16.0.0

192.168.0.0

169.254.0.0

最高地址

10.255.255.255

172. 31.255.255

192.168. 255.255

169.254. 255.255

 

10  协议的分层

1.         ISO模型分为七个概念层,它的构造是为了描述单一网络的协议,而没有一个特定的层来描述网际互联转发。他是一个概念的模型而非实现指南。与TCP/IP不一样。

2.         TCP/IP协议族把大量的智能放到了主机中,而路由器只负责数据转发,没有参与较高层的服务。

3.         TCP/IP协议把互联网分为五个层:应用层,运输层,互联网层,网络接口层,底层硬件。但是为了效率等折中原因,分层不会做的非常严格。

4.         点对点(Point to point protocol,简称PPP)。

 

 

 

11  用户数据报协议(UDP

1)  UDP是无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

2)  UDP报文的最终目的地是主机的(IP地址,端口)这样的一个抽象目的点。

3)  发送报文方要知道目的机器的IP地址和端口号;而且报文中还要携带回答报文应该反送至源机器的源端口号,这样目的机才可能向源机器应答。

4)  UDP数据报被IP数据报封装,UDP的首部只包含端口、长度、校验和,8个字节。

 

 

5)  UDP 是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。

6)  IPUDP的区别:IP在主机间传输,UDP区分主机上多个目的地。UDP并没有给IP层增加多少内容,只是一个“瘦”协议;所以UDP报文会出现丢失、重复、延迟或者无序交付的问题,那么使用UDP的用户程序需要处理这些问题。

 

12  可靠的流运输服务(TCP

1)  网络协议的研究目标之一就是为可靠的流交付服务找到通用的解决方案,从而能够构建一个流交付软件的实例,供所有应用程序使用。

2)  TCPTransmission Control Protocol)可靠的流交付服务,五个特征:面向数据流、虚电路连接、有缓冲的传输、无结构的数据流、全双工的连接。

3)  TCP 采用一种名为“带重传功能的肯定确认(positive acknowledge with retransmission )”的技术作为提供可靠数据传输服务的基础。即:

 

4)  使用滑动窗口的机制来提高网络吞吐量,同时解决端到端的流量控制

 

窗口左面是已经成功传输、接收和确认的;窗口内的为已经传输但没有确认的;窗口右面的为没有传输的。

5)  除了固定大小的滑动窗口外,还允许大小可变的滑动窗口,提供精确流量控制。

6)  TCP几乎不给下层通信系统提出任何的要求,不需要下层系统速度和可靠性。所以TCP可以广泛应用于很多通信网络。

7)  TCP使用连接而不是协议端口作为它的基本抽象,连接是用一对端点标识的。就是说,一个连接是(IP1port1)和(IP2port2)。因为TCP使用一对端点来标识连接,所以同一台机器上的某个端口号可以被多个连接共享。

8)  TCP报文格式:

0                                   15

16                             31

源端口( source port )号

目的端口号

顺序号( sequence number

确认号( acknowledgement number

报头长度

保留

URG

ACK

PSH

RST

SYN

FIN

窗口大小( window size

校验和( checksum

紧急指针( urgent pointer

选项+填充( 0 或多个 32 位字)

数据( 0 或多个字节)

         

注意:a.与序号相关的流与报文的流向相同,与确认序号相关的流与报文流向相反。

b.连接前双方需要就最大报文段长度达成一致。

9)  带外数据(Out of bandOOB)。

A)对已经建立连接的套接字上的应用来说,如果需要发送的数据比流上的普通数据重要,便可以将这些重要的数据标记成带外数据。位于连接另一端的应用可通过一个独立的逻辑信道(从概念上讲,该信道与数据流无关)来接收和处理OOB数据。

B)带外数据是相连的每一对流套接口间一个逻辑上独立的传输通道。系统通常把紧急数据从普通数据中分离出来单独存放。这就允许用户在顺序接收紧急数据和非顺序接收紧急数据之间作出选择,在这种情况下,用户也可以“偷看一眼”紧急数据。

10)TCP使用三次握手(three-way handshake)协议来建立连接。这三次握手为:

a)请求端发送一个SYN报文段(SYN 1)指明客户打算连接的服务器的端口,以及初始顺序号(ISN)。

b)服务器发回包含服务器的初始顺序号的SYN报文段(SYN1)作为应答。同时,将确认号设置为客户的ISN1以对客户的 SYN 报文段进行确认(ACK也为1)。

c)客户必须将确认号设置为服务器的ISN1以对服务器的SYN报文段进行确认(ACK1),该报文通知目的主机双方已完成连接建立。

三次握手协议是连接两端正确同步的充要条件,它完成两个重要功能:它确保连接双方做好传输准备,并使双方统一了初始顺序号。

 

11)TCP使用修改的三次握手协议来关闭连接,即终止一个连接要经过4次握手。

 

一旦在某一个方向上的连接关闭,TCP就拒绝来自该方向的数据;但是在反方向上数据还是可以继续流动。而且,尽管连接已经关闭,确认还是会继续反馈给对方的。

12)熟知TCP/UDP端口(well known port:

端口号

协议

关键词

UNIX 关键词

描述

1

TCP

TCPMUX

TCP 复用器

7

TCP/UDP

ECHO

echo

回送

9

TCP/UDP

DISCARD

discard

丢弃

15

TCP/UDP

netstat

网络状态程序

20

TCP

FTP-DATA

ftp-data

文件传输协议(数据)

21

TCP

FTP

ftp

文件传输协议

22

TCP/UDP

SSH

ssh

安全 Shell 远程登录协议

23

TCP

TELNET

telnet

远程登录

25

TCP

SMTP

smtp

简单邮件传输协议

37

TCP/UDP

time

时间

42

TCP/UDP

NAMESERVER

name

主机名字服务器

43

TCP/UDP

NICNAME

whois

是谁

53

TCP/UDP

DOMAIN

nameserver

域名服务器

67

UDP

BOOTPS

bootps

引导协议服务器

68

UDP

BOOTPC

bootpc

引导协议客户

69

UDP

TFTP

tftp

简单文件传送协议

79

TCP

FINGER

finger

Finger

80

TCP

HTTP

http

超文本传输协议

88

TCP

KERBEROS

kerberos

Kerberos 协议

93

TCP

DCP

设备控制协议

101

TCP

HOSTNAME

hostnames

NIC 主机名字服务器

110

TCP

POP3

pop3

邮局协议版本 3

111

TCP/UDP

SUNRPC

sunrpc

Sun Microsystems RPC

119

TCP

NNTP

nntp

USENET 新闻传送协议

123

UDP

NTP

ntp

网络时间协议

139

TCP

NETBIOS-SSN

NETBIOS 会话协议

161

UDP

snmp

简单网络管理协议

162

UDP

snmp-trap

SNMP 陷阱

389

TCP

LDAP

ldap

轻量目录访问协议

443

TCP

HTTPS

https

安全 HTTP 协议

513

UDP

who

UNIX rwho daemon

514

UDP

syslog

系统日志

525

UDP

timed

UNIX time daemon

546

TCP

DHCP-CLIENT

dhcp-client

动态主机配置协议客户

547

TCP

DHCP-SERVER

dhcp-server

动态主机配置协议服务器

 

 

原创粉丝点击