这是我写得第一篇博客,是一篇读书笔记。
前段时间,从网上买了W.Richard.Stevens的两本书《APUE》与《TCP/IP详解 卷1:协议》,前一本粗略的翻了一遍,算是对Linux系统有了直观上的了解,比如说文件操作、进程、线程等知识,准备这几天开始把《APUE》认真地看一遍,每天消化一点内容。而后一本书还在看,已经看到11章UDP的前半部分了,这里我把前10章的内容做一个总结,当做是知识的再消化。
第一次写博客,语言肯定会比较晦涩,表达也会不是很清晰。我是一名电子专业的学生,第一次接触TCP/IP协议栈的知识,难免会出现错误,如果您能够看到这篇文章的话,希望您能够指出我的错误,谢谢。
TCP/IP协议族能够让不同厂家生产的各种型号的运行不同系统的计算机能够相互通信。TCP/IP是一个一个协议族,它通常被认为是一个四个协议系统的组合。
TCP/IP协议族包括应用层、传输层、网络层、链路层。每个层负责不同的功能:
链路层:通常包括设备驱动程序与网络接口卡。不知道对不对,802.11其实就是在这个层上的一种协议,它采用不同的数据发送、接收格式,在上层与一般的TCP/IP协议族类似。
网络层:包括IP协议(网际协议,负责分组的选路),ICMP(Internet控制报文协议,Ping程序就是利用ICMP进行请求与应答,Traceroute则是用UDP进行IP路径的显示,它利用发送UDP数据与ICMP的回显,在发送第一个UDP数据是,使IP数据包中的TTL为1,当第一个路由器收到TTL为1或0,则路由器将不转发此IP数据报,以后每次使TTL加1则会回显下一个的路由选择,而在UDP数据报中要指定一个不可能的值作为目的端口,这样当目的地址收到TTL为1的数据报时,也会回显应答一个“端口不可达”的错误的ICMP报文,如果不指定一个无效的端口,当目的地址收到哪怕TTL为1的IP数据报时,也不会丢弃并应答)
传输层:主要有TCP与UDP两种。UDP是一种不可靠的传输协议,它的接收端不会回显一个报文,来告诉发送端已发送完成,可能会造成报文的丢失。TCP则提供一种稳定可靠地传输协议,它通过“三次握手”的方式,确认报文接收发送完成,否则会超时重传。它们两个的应用场景有所区别。
应用层:包括FTP文件传输协议与SMTP简单邮件传送协议等,负责处理特定的应用程序细节。
TCP/IP协议族如下图所示:
每个网络接口豆邮一个唯一的Internet地址(IP地址),IP为23bit长,五类不同的IP地址如下图:
A:0.0.0.0~127.255.255.255
B:128.0.0.0~191.255.255.255
C:192.0.0.0~223.255.255.255
D:224.0.0.0~239..255.255.255
E:240.0.0.0~255.255.255.255
DNS(域名系统),用来提供主机名与IP地址间的映射信息。
在发送数据前,TCP/IP协议族的封装示意图:
当网络设备接收到一个数据报时,它会从下到上依次去掉以太网首部、IP首部、TCP首部后将数据传给目的端口的应用程序。
注:上图为一般的形式,不是每个报文都含有以上所有部分,如有时采用的UDP格式,它的首部只有8字节,IP首字中有某种标示,来确定数据术语ICMP或IGMP或TCP或UDP层。
链路层
链路层有三个目的:
1、为IP模块接收或发送数据
2、为ARP(地址解析协议)模块发送ARP请求或者ARP应答(当数据报到达局域网中时,路由器发送一份ARP请求报文,目的地址与报文地址一样的借口响应请求,发送自身的48bit的MAC地址,告诉路由器这份数据要传送的地方,ARP为IP地址到对应的硬件地址提供动态映射)
3、为RARP模块发送RARP请求或者RARP应答(一般意义上,RARP是ARP得逆过程)
链路层协议包括以太网和IEEE820封装、SLIP(Serial Line IP)'、PPP(点对点协议)等。
大多数的计算机都支持环回接口(Loopback Interface),它允许同一台主机上的应用程序进行通信,ip地址一般为127.0.0.1(A类地址),命名为localhost。
MTU(最大传输单元),不同类型的网络大多数都有一个上限。如一个IP数据报要发送,但IP数据报的长度大于链路层的MTU,则要进行分片传送,即把数据报分成若干片传送。可以通过ICMP不可达错误来发现选路的MTU。
可以通过降低MTU的方式,来提高SLIP链接运行的交互式应用程序。如9600b/s的线路速率,一个字节8bit,加上起始与终止比特,线路速率为960B/S,传送一个1024B的数据需要1066S,交互式应用程序就必须等待533秒这是很不友好的,所以通过降低MTU则可以降低发送数据后接收响应的时间。
IP:网际协议
IP网际协议提供不可靠的的传送服务,不可靠值得是它不保证IP数据报能够正确到达目的地址,如发生错误,它会丢失该数据报,并回显一个ICMP消息给信源端。任何要求可靠地服务必须通过上一级(TCP)来提供.
4位首部长度:因为其为一个4bit字段,意味着IP首部最长有60字节。如上图所示,在IP首部中有个选项段,其用来储存IP源站选路的信息,其包括宽松源站选路(在选项中包含了些IP地址清单,连个IP地址间可以通过其他IP地址)、严格源路由选站(如果下一个IP地址不在其IP地址清单上,则成圣ICMP超时错误)
总长度字段:整个IP数据报的长度,其最大值为65535字节
标识字段:唯一标识主机发送的每一个数据报,发送完一个数据报后加1
TTL(time-to-live)字段:设置了数据报可以经过的最多路由器数(前面说个Traceroute程序就是利用这个特性)
标志字段与偏移字段:三位的标志字段中有一位表示是否可以允许对数据报进行分片传输,还有一位用来表示是否还有数据片。而偏移字段用来表示当前分片相对与数据起始位置的偏移量。
后面就是32bit的源IP地址以及32bit的目的IP地址跟数据。
觉得自己好啰嗦,明天继续写............