计算机网络TCP/IP小结
前期为了移植lwip到ucosii上,发现对TCP/IP基本上不懂,看代码完全糊涂。无奈,在书柜里翻了一本教材,计算机网络(第5版 谢希仁),零零散散的看完了,现在小结一下,省的以后忘记。
TCP/IP概念:TransmissionControl Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。该协议是十分可靠的协议
从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层(来源于百度百科)
一、物理层
物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,,而不是指具体的传输媒体。屏蔽差异,是数据链路层感觉不到差异。
二、数据链路层
数据链路层属于计算机网络的底层,软件编写也是从这一层开始。该层主要负责处理硬件地址MAC。
数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出来上交给网络层。在因特网中,网络层协议数据单元就是IP数据报(或简称数据报、分组或包)。
在数据链路层广泛使用的是CRC校验,若校验出错,则丢弃该帧,以免占用网络资源。在以太网中数据链路层就是MAC层。
一台计算机应该有两个地址,一个是网络地址,就是IP,一个是硬件地址,就是MAC(6字节,48位),MAC地址是固化在计算机适配器的ROM中的。
MAC(Media AccessControl)地址,或称为MAC位址、硬件位址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层资料链接层则负责MAC位址。因此一个主机会有一个IP地址,而每个网络位置会有一个专属于它的MAC位址。(百度百科) MAC帧格式
它由6个字节的目的MAC地址,6个字节的源MAC地址,2个字节的类型域(用于表示装在这个帧里面数据的类型,可指定为IP包类型)
在系统的输入输出中,MAC帧是最原始的数据,是软件最先得到或最后发送的数据。还有数据在各个路由器转发中mac帧是变化的,只指向当前的目的和源硬件地址。但IP是不变的
数据链路层还有个PPP协议,当用户需要连接网络就要先连接ISP,就需要使用PPP协议,好像是刚连接网络时使用的,不太理解。 以太网中用mac,远程的话就用ppp(如ADSL拨号,就是基于ppp的)。
PPP在封装方式以以太网的封装方式不同,它没有以太网帧所要求的MAC地址,它通过自身的协商过程实现点到点的数据传输。(来源于网络)
一、网络层
网络层主要使用的是IP协议,网络层向上只提供简单灵活、无连接、尽最大努力交付的数据报服务,不提供服务质量的承诺。 与IP协议配套使用的还有4个协议
地址解析协议ARP(Address ResolutionProtocol)
逆地址解析协议RARP(Reverse Address ResolutionProtocol) 网际控制报文协议ICMP(Internet ControlMessage Protocol)(与ping指令有关)
网际组管理协议IGMP(Internet GroupManagement Protocol)
将网络互相连接起来要使用一些中间设备,根据设备所在层次,有4种设备
1.物理层的叫转发器(repeater)
2.数据链路层的叫网桥或桥接器(bridge)
3.网络层使用的是路由器(router)
4.网络层以上的叫网关(gataway)
A、B、C3类(如下表格)由InternetNIC在全球范围内统一分配,D、E类为特殊地址。
网络类别
最大网络数
第一个可用的网络号
最后一个可用的网络号
每个网络中的最大主机数
A
126
1
126
16777214
B
16382
128.1
191.255
65534
C
2097150
192.0.1
223.255.255
254
(百度百科)
IP地址是标志一个主机(或路由器)和另外一条链路的接口。由于一个路由器至少应当连接到两个网路,因此一个路由器至少有两个不同的Ip地址。
和链路层通讯方式:在数据链路层接收到MAC帧时,其根据是MAC帧首部的硬件地址,剥去MAC帧的手部和尾部后把MAC层数据上交到网络层,网络层才能在IP数据包首部找到源IP和目的IP ARP协议:通过已知的IP地址找到对方的MAC地址。
RARP协议:通过对方的硬件地址找到对应的IP地址
ARP协议实现:每个主机都有一个ARP高速缓存,里面有IP地址到硬件地址的映射表,并实时更新,若本机没有,则在本局域网内广播发送ARP请求分组,若本局域网没有,通过路由器转发。 IP数据报格式
IP数据报 (IP Datagram)。这是一个与硬件无关的虚拟包,
由首部和数据两部分组成。首部的前一部分是固定长度,共 20 字节, 是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段, 其长度是可变的。首都中的源地址和目的地址都是 IP 协议地址。 那么IP数据报格式又是怎样要求的呢?
1.IP数据报首部的固定部分中的各字段
①版本:占4位,指IP协议的版本。通信双方使用的
IP协议版本必须一致。日前广泛使用的 IP协议版本号为 4 (即 IPv4)。 IPv6 目前还处于起步阶段。
②首部长度:占 4 位,可表示的最大十进制数值是 15。请注意, 这个字段所表示数的单位是32位字 ( 1 个32位字长是4 字节), 因此,当 IP 的首部长度为 1111 时 (即十进制的 15),
首部长度就达到 60字节。当 IP 分组的首部长度不是4字节的整数倍时, 必须利用最后的填充字段加以填充。
因此数据部分永远在 4字节的整数倍开始,
这样在实现 IP协议时较为方便。
首部长度限制为 60字节的缺点是有时可能不够用。
这样做的目的是希望用户尽量减少开销。
最常用的首部长度就是 20 字节 (即首部长度为 0101),
这时不使用任何选项。
③服务:占 8 位,用来获得更好的服务。
这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。
19xx年IETF把这个字段改名为区分服务 DS (DifferentiatedServices)。 只有在使用区分服务时,这个字段才起作用。
④总长度:总长度指首都及数据之和的长度,单位为字节。
因为总长度字段为 16位,所以数据报的最大长度为 216-1=65 535字节。 在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,即最大传送单元 MTU (Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度 (即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
⑤标识 (Identification):占 16位。
IP软件在存储器中维持一个计数器,每产生一个数据报,
计数器就加 1,并将此值赋给标识字段。但这个“标识”并不是序号, 因为 IP是无连接的服务,数据报不存在按序接收的问题。
当数据报由于长度超过网络的 MTU 而必须分片时,
这个标识字段的值就被复制到所有的数据报的标识字段中。
相同的标识字段的值使分片后的各数据报片最后能正确地重装成为
原来的数据报。
⑥标志 (Flag):占3 位,但目前只有2位有意义。
标志字段中的最低位记为 MF (More Fragment)。
MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片 中的最后一个。
标志字段中间的一位记为 DF(Don't Fragment),
意思是“不能分片”。只有当 DF=0时才允许分片。
⑦片偏移:占 13位。较长的分组在分片后,
某片在原分组中的相对位置。也就是说,相对用户数据字段的起点, 该片从何处开始。片偏移以 8个字节为偏移单位。
这就是说,每个分片的长度一定是 8字节 (64位)的整数倍。
⑧生存时间:占 8位,生存时间字段常用的英文缩写是
TTL (Time To Live),其表明数据报在网络中的寿命。
由发出数据报的源点设置这个字段。
其目的是防止无法交付的数据报无限制地在因特网中兜围子,
因而白白消耗网络资源。最初的设计是以秒作为 TTL的单位。
每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。
若数据报在路由器消耗的时间小于 1 秒,就把TTL值减 1。
当 TTL值为 0时,就丢弃这个数据报。
⑨协议:占 8 位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
⑩首部检验和:占 16位。这个字段只检验数据报的首部,
但不包括数据部分。这是因为数据报每经过一个路由器,都要重新计算一下首都检验和 (一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
⑾源地址:占32位。
⑿目的地址:占 32位。
2.IP数据报首部的可变部分
IP首都的可变部分就是一个可选字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从 1 个字节到40个字节不等,取决于所选择的项目。某些选项只需要 1 个字节,它只包括 1 个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0 的填充字段补齐成为 4字节的整数倍。 增加首都的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的 IPv6就将 IP数据报的首部长度做成固定的。
IP数据包的总长度过大,超过链路的最大MTU时,数据包就会被分成多片, 而在如今的IPv4的网络中,数据传输时不可靠的,是尽力而为的,
所以这些分片的数据单元到达对端的链路和时间都是不同的,
对端根据IP首部中的标示符(Identification)、标志(Flag)、段偏置值字段 重组数据包。
(来源于网络)
? 运输层
运输层是整个网络体系结构中的关键层次之一,主要的协议有TCP、UDP。
从运输层角度看,通信的真正端点并不是主机而是主机中的进程。运输层提供应用进程间的逻辑通信。运输层向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信,当面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种通信信道就像是全双工的可靠信道。但当运输层采用无连接的UDP时,这种逻辑通信信道仍然是一条不可靠信道。 用户数据报协议UDP(User Datagram Protocol) UDP是一种无连接的、不可靠的传输层协议;
在完成进程到进程的通信中提供了有限的差错检验功能;
设计比较简单的UDP协议的目的是希望以最小的开销来达到网络环境中的进程通信目的;
进程发送的报文较短,同时对报文的可靠性要求不高,那么可以使用UDP协议
UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
UDP首部格式
总长度UDP用户数据报的长度,最小值为8(仅有首部) 检验和 把首部和数据部分一起检验了。
传输控制协议TCP(Transimision Control Protocol)
TCP主要特点
1、TCP是面向连接的运输层协议,应用程序在使用TCP之前,必须先简历TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。
2、每一条TCP连接只能有两个端点(endpoint)。TCP连接的端点叫做套接字(socket)。
3、TCP提供可靠的交付服务。
4、TCP提供全双工通信,两端都设有发送缓存和接收缓存。
5、面向字节流。
TCP报文首部格式
源端口和目的端口:各占2个字节,是运输层与应用层的服务接口。 序号:占4个字节。TCP连接传送的数据流中的每一个字节都被编上一个序号。首部中序号字段的值指的是本报文段所发送的数据的第一个字节的序号。
确认号:占4个字节,是期望收到对方下一个报文段的数据的第一个字节的序号。
数据偏移:占4 bit,它指出报文段的数据起始处距离TCP报文段的起始处有多远。实际上就是TCP报文段首部的长度。
保留:占6 bit,保留为今后使用。
紧急比特URG:当URG=1时,表明紧急指针有效。它告诉系统报文段中有紧急数据,应尽快传送。
确认比特ACK:ACK=1时确认号字段才有效,ACK=0时确认号字段无效。
推送比特PUSH:接收方接收到PUSH=1的报文段时会尽快的将其交付给接收应用进程,而不再等到整个接收缓存都填满后再向上交付。 复位比特RST:当RST=1时,表明TCP连接中出现严重差错,必须释放连接。复位比特还用来拒绝一个非法的报文段或拒绝打开一个连接。
同步比特SYN:在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,应在响应的报文段中使SYN=1和ACK=1。因此,SYN=1就表示这是一个连接请求或连接接收报文。
终止比特FIN:当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
窗口:占2个字节,用来控制对方发送的数据量,单位是字节,指明对方发送窗口的上限。
校验和:占2个字节,校验的范围包括首部和数据两个部分,计算校验和时需要在报文段前加上12字节的伪首部。
紧急指针:占2个字节,指出本报文段中紧急数据最后一个字节的序号。只有当紧急比特URG=1时才有效。
选项:长度可变。TCP只规定了一种选项,即最大报文段长度MSS (Maximum Segment Size)。
TCP连接建立的过程如下图所示:
一、应用层(用的不多,对Lwip来说)
域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。
文件传输协议FTP
万维网WWW(world Wide Web)
URL(Uniform ResourceLocator):使每一个文档在整个因特网范围内具有唯一的标识符URL。
超文本传送协议HTTP(HyperText Transfer Protocol) 使万维网客户程序与万维网服务器程序之间的交互遵守严格的协议
第二篇:计算机网络实验报告
武汉理工大学
学 生 实 验 报 告 书
实验课程名称 计算机网络
开 课 学 院 计算机科学与技术学院
指导老师姓名 刘维
学 生 姓 名
学生专业班级
2013 — 2014 学年 第 二 学期
实验课程名称: 计算机网络
实验课程名称: 计算机网络