TCP/IP理论

1 初识TCP/IP

1.TCP/IP体系结构和OSI体系结构

1.OSI参考模型与TCP/IP 图解

OSI TCP/IP protocol(协议) explain
应用层 应用层 HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3 应用层与应用程序界面沟通,以达至展示给用户的目的。 在此常见的协定有: HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3等 提供应用程序间通信
表示层 应用层 表示层对网络传输的数据进行变换,使得多个主机之间传送的信息能够互相理解,包括数据的压缩、加密、格式转换等 处理数据格式、数据加密等
会话层 应用层 管理主机之间会话过程,包括会话建立、终止和会话过程中的管理 建立、维护和管理会话
传输层 传输层 TCP、UDP 提供可靠的数据传输服务(注意OSI的传输层与TCP/IP的传输层的功能不尽相同),它检测路由器丢弃的包,然后产生一个重传请求,能够将乱序收到的数据包重新排序 建立端到端连接
网络层 网络层 IP、ICMP、IGMP、RIP、OSPF、BGP 网络层负责将各个子网之间的数据进行路由选择,分组与重组。本层中数据传输的单位为数据包(packet)。属于本层定义的规范有IP、RIP、OSPF、ICMP、IGMP等。实际使用中的设备如路由器属于本层 寻址和路由选择
数据链路层   ARP、RARP、HDLC、PPP、STP、SLIP、CSLIP、MTU 对物理层收到的比特流进行数据成帧。提供可靠的数据传输服务,实现无差错数据传输。在数据链路层中数据的单位为帧(frame)。属于本层定义的规范有HDLC、PPP、STP等,实际使用中的设备如switch交换机属于本层 介质访问、链路管理
物理层 网络接口与物理层(链路层) EIA/TIA、RS-232、RJ-45、ISO2110、IEEE802.1、IEEE902.2 物理层定义了所有电子及物理设备的规范,为上层的传输提供了一个物理介质,本层中数据传输的单位为比特(bit/二进制位)。属于本层定义的规范有EIA/TIA RS-232、RJ-45等,实际使用中的设备如网卡属于本层 比特流传输

2.TCP结构

1)网络接口层

    物理层定义与传输媒体的接口有关的一些特性,即机械特性、电气特性、功能特性、过程特性,并需要完成并行传输和串行传输之间的转换。
    数据链路层向该层用户提供透明的和可靠的数据传输服务。 透明性是指该层上传输的数据的内容、格式及编码没有限制,也没有必要解释信息结构的意义;可靠性是指在传输过程中将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,其具体的方法有帧同步、差错控制、流量控制、链路管理。
    数据链路层中的主要协议有点对点协议PPP,CSMA/CD协议,以太网802.3。

2)网际层(IP层)

    网际层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。网际层不提供服务质量的承诺,即所传输的分组可能出错、丢失、重复和失序,当然也不保证分组交付的时限。
    网际层中主要协议有IP协议,地址解析协议ARP和网际控制报文协议ICMP等。
    IP协议是网际层的核心,通过路由选择将下一跳IP封装后交给网络接口层。IP 数据报是无连接服务。
    ICMP是网际层的补充,可以回送报文。用来检测网络是否通畅(使用ping命令)。
    ARP是通过已知IP,寻找对于主机的MAC地址。

3)运输层

    运输层为应用进程之间提供端到端(进程到进程)的逻辑通信,并具有复用和分用的功能,即发送方不同的应用进程都可以使用同一个运输层协议传送数据;接收方的运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。运输层还将对报文进行差错控制,以提供可靠传输。
    运输层中主要协议有用户数据报协议UDP和传输控制协议TCP   

4)应用层

     应用层为用户提供应用程序。
     应用层中主要协议有域名系统DNS,文件传输协议FTP,远程终端协议TELNET,超文本传输协议HTTP,简单邮件传送协议SMTP,邮件读取协议POP3和IMAP,动态主机配置协议DHCP等。
     DNS:提供域名解析服务,提供域名到IP地址之间的转换,使用端口53
     FTP:在异构网络中任意计算机之间传送文件,使用端口21
     TELNET:提供用户远程登录服务,使用端口23,使用明码传送,保密性差、简单方便
     HTTP:用于实现万维网上的各种链接,即万维网客户程序与万维网服务器之间的连接,使用端口80
     SMTP/POP3、IMAP:提供邮件的传输,用来控制信件的发送、中转、从邮件服务器读取邮件
     DHCP:为新加入网络的计算机自动分配IP地址

2.TCP/IP主要协议

这里写图片描述 
注:这里的ARP和RARP可以说是属于网络层,也可以说是属于链路层。ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。

ARP协议

    解决同一个局域网内主机或路由器的IP地址和MAC地址的映射问题。
    假设在一个以太网上的 4 台计算机,分别是计算机 A 、 B 、 X 和 Y ,通过TCP/IP 协议进行通信,那么双方的数据链路层必须知道对方的 MAC 地址。每台计算机都要在各自的高速缓存区中存放一张 IP 地址到 MAC 地址的转换表,称 ARP 表。其中存放着最近用到的一系列和它通信的处于同一子网的计算机的 IP 地址和 MAC 地址的映射。在主机初始启动时, ARP 表为空。现在源端计算机 A ( 192.168.3.1 )要和计算机 B(192.168.3.2)通信。在计算机 A 发送信息前, 必须首先得到计算机B的MAC地址的映射关系。

RARP协议

DHCP协议

    DHCP是动态主机配置协议,常用于给主机动态地分配IP地址, 他提供了即插即用联网的机制,这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与; DHCP是应用层协议, 他是基于UDP的;

ICMP协议

    IP提供的是尽最大努力交付的无连接服务,因此并不能解决网络层中的数据报丢失、重复、延迟或乱序等问题,为了提高IP数据报成功交付的机会, 在网络层使用ICMP(Internet Control Message Protocol:Internet控制报文协议)协议来允许主机或者路由器报告差错和异常情况. 

RIP协议

    路由信息协议RIP是一种分布式的基于距离向量的路由选择协议, 属于内部网关协议(IGP)。RIP协议中的“距离”也称为“跳数”,每经过一个路由器,跳数就加1。协议规定: 同一自治系统(A.S.)中的路由器每30秒会与相邻的路由器交换路由信息,以动态的建立路由表。当传输数据时,RIP将选择一条具有最少路由器的路由。

OSPF协议

    OSPF (Open Shortest Path First, 开放最短路径优先)。它是为克服RIP的缺点在1989年开发出来的。OSPF的原理很简单,但实现起来却较复杂。“开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。“最短路径优先”是因为使用了Dijkstra最短路径算法。

BGP协议

    BGP(Border Gateway Protocol)是一种不同自治系统的路由器之间交换路由信息的协议, 它的基本功能是在自治系统间自动交换无环路的路由信息, 他是一种外部网关协议(EGP), 边界网关协议常常应用于互联网的网关之间. 路由表包含已知路由器的列表, 路由器能够到达的地址以及到达每个路由器的跳数.
    由于:
    1)因特网的规模太大, 使得自治系统之间路由选择非常困难;
    2)对于自治系统之间的路由选择, 要寻找最佳路由是很不现实的;
    3)自治系统之间的路由选择必须考虑有关策略;
    因此, 边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子), 而非要找到一条最佳路由.
    BGP采用的是”路径向量选择协议”, 他与距离向量协议和链路状态协议都有很大的区别. BGP是应用层协议, 他是基于TCP的;

IGMP协议

    IGMP协议用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。 组播路由器不需要保存所有主机的成员关系,它只是通过IGMP协议了解每个接口连接的网段上是否存在某个组播组的组成员。而主机只需要保存自己加入了哪些组播组。
        简而言之,IGMP协议是让连接在本地局域网上的组播路由器知道本局域网上是否有主机上的某个进程参加或退出了某个组播组。
    IGMP应视作TCP/IP协议的一部分, 其工作可以分为两个阶段:
    1)当某个主机加入新的组播组时, 该主机应向组播组的组播地址发送一个IGMP报文, 声明自己要成为该组的成员. 本地组播路由器收到ICMP报文后, 将组成员关系转发给因特网上其他的组播路由器.
    2)因为组成员的关系是动态的, 本地组播路由器要周期性地探询本地局域网上的路由器, 以便知道这些主机是否还继续是组的成员. 只要对某个组有一个主机响应, 那么组播路由器就认为这个组是活跃的. 但一个组在经过几次探询之后仍然没有一个主机响应, 则不再将该组的成员关系转发给其他的组播路由器.

3.TCP/IP数据封装模型

这里写图片描述 



4.TCP/IP数据解包模型


2 TCP/IP入门

这里写图片描述

1 应用层

DNS

1.DNS介绍
域名系统是基于描述名字-地址映射的分布式计算机系统的实现,其作用是提供主机名和IP 地址间的映射关系。
名字到IP地址的解析是由若干个域名Server组成的, 域名Server程序在专设的结点上运行, 运行这些程序的机器成为域名服务器(Domain Server);
2.层次域名空间

这里写图片描述 
Internet采用了层次树状结构的命名方法, 任何一个连接在因特网上的主机或路由器都有一个唯一的层次结构的名字, 即域名。

域名的结构由标号序列组成, 各标号之间用点分隔开:
   … . 三级域名 . 二级域名 . 顶级域名
   各标号分别代表不同级别的域名;

域名只是个逻辑概念, 并不代表计算机的物理位置, 变长的域名和使用有助于记忆的字符串来便于人们使用. 而IP地址是定长的32位二进制数字则非常便于计算机处理;
3.域名服务器
负责域名到IP地址的解析。使用TCP与UDP端口号都是53,主要使用UDP,服务器之间备份使用TCP。

这里写图片描述

域名服务器的四种类型:

(1)根域名服务器: 最高层次的域名服务器。记录着所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。在因特网上共有13组根域名服务器;

(2)顶级域名服务器: 负责管理在该顶级域名服务器注册的所有二级域名。当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的 IP 地址)。

(3)权限域名服务器: 是负责一个区域的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。

(4)本地域名服务器: 当一个主机发出 DNS查询请求时,这个查询请求报文就发送给本地域名服务器。每一个因特网服务提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器。
4.FTP
    FTP(File Transfer Protocol,文件传输协议)使用客户/服务器模式。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,每个从属进程负责为一个客户进行FTP服务。
    FTP 使用两条TCP连接来完成文件传输,一条是控制连接,另一条是数据连接。平时控制链接总在端口21等待客户的连接请求,当用户需要传输文件时,客户首先主动与服务器端口21建立一个控制连接,用来传送客户的命令和服务器的应答。客户还会告知服务器自己将用的数据端口号, 控制链接会一直保持到客户与服务器FTP全部通信结束为止。
    当客户发出文件下载、文件上传、列目录的数据传输请求时,服务器端口20主动与客户端告知的数据端口建立数据连接,并在其上传输数据,在该次数据传输完毕后立即关闭数据传输连接。
    使用两个连接一方面使协议更加简单和更容易实现;另一方面在传输文件时还可以同时利用控制连接与服务器进行交互(如客户发送请求终止文件传输)。
5.TFTP
    TFTP(Trivial File Transfer Protocol,简单文件传输协议)也是用于在远端服务器和本地主机之间传输文件的,相对于FTP,TFTP没有复杂的交互存取接口和认证控制,适用于客户端和服务器之间不需要复杂交互的环境。TFTP协议的运行基于UDP协议,使用UDP端口69进行数据传输。
FTP与TFTP的不同:

1.传输协议不同,FTP是基于TCP, TFTP是基于UDP 
2.端口号不同 ,FTP是用21,20, TFTP是69 
3.速度和安全 ,FTP在速度慢但安全性好, TFTP速度快但是安全性不如FTP高

6.WWW/万维网
    WWW以客户/服务器方式工作。使用端口80.  浏览器就是在用户计算机上的WWW客户程序。WWW文档所驻留的计算机则运行服务器程序,也称为WWW服务器。客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的WWW文档。
    在万维网客户程序与万维网服务器程序之间进行交互所使用的协议是超文本传送协议 HTTP (Hyper Text Transfer Protocol), HTTP使用TCP 连接进行可靠的传送。HTTP 是面向事务的应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
    WWW使用统一资源定位符 URL (Uniform Resource Locator)来标志万维网上的各种文档,使每一个文档在整个因特网的范围内具有唯一的标识符 URL。URL的一般格式
    <协议>://<主机>:<端口号>/<路径> 
    超文本标记语言 HTML (Hyper Text Markup Language)使得万维网页面的设计者可以很方便地用一个超链接从本页面的某处链接到因特网上的任何一个万维网页面,并且能够在自己的计算机屏幕上将这些页面显示出来。

万维网的工作过程:

   <设 URL 为 http://www.tmtpost.com/99682.html>用户点击鼠标后所发生的事件:
(1) 浏览器分析超链指向页面的 URL。
(2) 浏览器向 DNS 请求解析 www.tmtpost.com 的 IP 地址。
(3) 域名系统 DNS 解析出钛媒体服务器的 IP 地址。
(4) 浏览器与服务器建立 TCP 连接
(5) 浏览器发出取文件命令:  GET /99682.html
(6) 服务器给出响应,把文件 99682.html 发给浏览器。
(7) TCP 连接释放。
(8) 浏览器显示钛媒体相关网页文件 99682.html 中的所有文本。
7.HTTP

主要特点

HTTP是面向事务的客户服务器协议。
HTTP 协议是无状态的(stateless),即不需要记忆交互的当前状态,因为过程简单。
HTTP 1.0协议是非持续连接。建立TCP连接后,一个HTTP请求过去,一个HTTP响应过来,然后就断开TCP连接。
HTTP 使用了面向连接的 TCP 向上提供的服务。但 HTTP 协议本身是无连接的。

持续连接

不同于HTTP/1.0,HTTP/1.1 协议使用持续连接。
万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。而且这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。
目前一些流行的浏览器(如IE 6.0)的默认设置就是使用 HTTP/1.1。

持续连接的两种工作方式

非流水线方式:客户在收到前一个响应后才能发出下一个请求。虽然这比非持续连接的两倍 RTT 的开销节省了建立 TCP 连接所需的一个 RTT 时间,但服务器在发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源。
流水线方式:客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。使用流水线方式时,客户访问所有的对象只需花费一个 RTT时间,使 TCP 连接中的空闲时间减少,提高了下载文档效率

HTTP请求报文格式 
这里写图片描述 
所谓“方法”就是对所请求的对象进行的操作,因此这些方法实际上也就是一些命令。而且,请求报文的类型是由它所采用的方法决定的。

HTTP响应报文格式 
这里写图片描述 
响应报文的开始行是状态行, 状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语.

2 传输层

1.传输层的主要功能
1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主机到主机提供逻辑通信)。
2)复用和分用: 复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据; 分用是指接收方的传输层在剥去报文的首部之后能够把这些数据正确交付到目的应用进程.
3)传输层还会对收到的报文进行差错检测(首部和数据部分), 而网络层只检查IP数据报的首部, 不检验数据部分是否出错。
4)传输层需要有两种不同的运输协议:面向连接的传输控制协议 TCP (Transmission Control Protocol)和无连接的用户数据报协议 UDP (User Datagram Protocol);
2.流量控制与拥塞控制的区别
流量控制往往是指在发送端和接收端之间的点对点通信量的控制. 流量控制所要做的是抑制发送端发送数据的速率, 以便使接收端来得及接收; 而拥塞控制必须确保通信子网能够传送待传送的数据, 是一个全局性的问题, 涉及网络中所有的主机、路由器以及导致网络传输能力下降的所有因素.
3.端口
1.端口就是传输层的服务访问点, 用一个 16位的数字进行标标记。

2.端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。

3.端口的作用是让应用层的各种应用进程都能将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层的哪个进程。

4.从这个意义上讲,端口是用来标志应用层的进程;
常用端口


16bit 2进制数 0~65535

代表目标机器的某个进程

众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)

已登记端口:1024~49151

动态或私有端口:49152~65535

约定 50000以上

4.TCP UDP
1.TCP概述
    TCP是一种面向连接的(一对一),提供可靠交付的和全双工通信的,基于字节流的端到端传输层通信协议。
    面向连接: TCP在传输数据之前必须先建立连接,数据传输结束后要释放连接。
    一对一: 每一条TCP连接只能有2个端点,故TCP不提供广播或多播服务。
    可靠交付: TCP提供可靠交付,通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达。
    基于字节流: TCP是面向字节流的。虽然应用进程和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流, 而并不知道所传输的字节流的含义。
2.UDP概述
    UDP是一种无连接的,尽最大努力交付的和全双工通信的,基于报文段的端到端传输层通信协议。
    无连接: UDP在发送数据之前不需要建立连接
    尽最大努力交付: UDP不保证可靠交付,主机不需要维持复杂的连接状态
    面向报文: UDP是面向报文的。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的的边界,即应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。在接收端,UDP一次交付一个完整的报文, 因此应用程序需要选择合适的报文大小。
其他:
    UDP没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。
    UDP支持一对一、一对多、多对一和多对多的交互通信。
    UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
3.TCP和UDP的区别
TCP UDP
面向连接 无连接
传输速度慢 传输速度快
保证数据有序到达 不保证数据有序到达
保证数据正确性 可能丢包
TCP报文段 UDP用户数据报
系统资源要求多(需要内核维护发送/接受缓冲区) 要求少(不需要内核维护缓冲区, 直接将数据报发送到网络上, 或直接交付给进程)
适用于对效率要求相对低,但对准确性要求相对高的场景下,或者是有一种连接概念的场景(如HTTP服务) 适用于对效率要求相对高,对准确性要求相对低的场景(如视频点播)
4.UDP数据报

这里写图片描述 
UDP有两个字段: 首部字段和数据字段。 
首部字段很简单,只有8个字节,由4个字段组成,每个字段的长度都是两个字节。

源端口号 在需要对方回信时选用。不需要时可用全0。

目的端口号 这在终点交付报文时必须要使用到
UDP长度 UDP用户数据报的长度,其最小值是8(仅有首部)
UDP校验和 检测UDP用户数据报在传输中是否有错。有错就丢弃

UDP校验

    UDP首部中校验和的计算方法有些特殊。在计算校验和时,要在UDP用户数据报之前增加12个字节的伪首部。伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和。与IP数据报的校验和只校验IP数据报的首部不同,UDP的校验和是把首部和数据部分一起都校验。

udp效验

    在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和, 示例如下:

这里写图片描述 
在发送方,首先是把全零放入校验和字段并且添加伪首部。然后,把UDP数据报看成是由许多16位的字串连接起来。若UDP数据报的数据部分不是偶数个字节,则要在数据部分末尾增加一个全零字节(但此字节不发送)。接下来就按二进制反码计算出这些16位字的和。将此和的二进制反码写入校验和字段。在接收方,把收到的UDP数据报加上伪首部(如果不为偶数个字节,还需要补上全零字节)后,按二进制反码计算出这些16位字的和。当无差错时其结果应全为1。否则就表明有差错出现,接收方就应该丢弃这个UDP数据报。

5.TCP报文段

这里写图片描述 
协议描述

源端口/目的端口 源/目的主机的IP地址加上端口号构成一个TCP连接(Socket)
序号和确认号 序号为该TCP数据包的第一个字节在所发送的数据流中的偏移量;确认号为希望接收的下一个数据字节的序号;
数据偏移(首部长度) 以4个字节为单位,通常为20个字节
6个标志位:  
URG 如果使用了紧急指针,URG置1,紧急指针为当前序号到紧急数据位置的偏移量(常用于发送/接受带外数据)
ACK 为1表示确认号有效,为0表示该TCP数据包不包含确认信息
PSH 表示是带有PUSH标志的数据,接收到数据后不必等缓冲区满再发送(较少使用)
RST 置为1时表示TCP连接中出现了严重的差错, 必须释放连接, 然后重建连接, 也可用于拒绝非法的数据或拒绝连接请求
SYN 用于建立连接,连接请求时SYN=1,ACK=0;响应连接请求时SYN=1,ACK=1
FIN 用于释放连接,表示发送方已经没有供发送的数据
窗口大小 用来让对方设置发送窗口的大小(用于流量控制)
校验和 校验和覆盖了整个数据包,包括对数据包的首部和数据
紧急指针 指出本报文段中紧急指针共占用多少个字节(紧急数据放在本报文段数据的最前面)
选项 常见的选项是MSS(Maximum Segment Size, 最大报文长度)
填充字 段 为了使整个首部为4字节整数倍
6.TCP三次握手

为什么需要采用三次握手?

    主要是为了防止两次握手情况下已失效的连接请求报文段突然又传送到服务端,而产生的错误。举例如下:

客户A向服务器B发出TCP连接请求,第一个连接请求报文在网络的某个节点长时间滞留,A超时后认为报文丢失,于是再重传一次连接请求,B收到后建立连接。数据传输完毕后双方断开连接。而此时,前一个滞留在网络中的连接请求到达了服务端B,而B认为A又发来连接请求,若采用的是“两次握手”,则这种情况下B认为传输连接已经建立,并一直等待A传输数据,而A此时并无连接请求,因此不予理睬,这样就造成了B的资源白白浪费了;但此时若是使用“三次握手”,则B向A返回确认报文段,由于是一个失效的请求,因此A不予理睬,建立连接失败。第三次握手的作用:防止已失效的连接请求报文段突然又传送到了服务器。

三次握手过程

这里写图片描述

1 第一次握手:客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含应用层数据,其首部中的SYN标志位被置为1。另外,客户机会随机选择一个起始序号seq=x(连接请求报文不携带数据,但要消耗掉一个序号)。

2 第二次握手:服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并在OS内核中为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值为x+1(表示希望收到的下一个字节的序号为x+1),并且服务器随机产生起始序号seq=y(确认报文不携带数据,但也要消耗掉一个序号)。

3 第三次握手:当客户机收到确认报文段后,还要向服务器给出确认,并且也要在client端的OS内核中给该连接分配缓存和变量。这个报文段的ACK标志位被置1,序号字段为x+1,确认号字段为y+1。

需要注意的是:服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的。这就使得服务器易于受到SYN洪泛攻击。

7.TCP四次断开

这里写图片描述

1 第一次断开:客户机打算关闭连接,就向其TCP发送一个连接释放报文段,并停止发送数据,主动关闭TCP连接,该报文段的FIN标志位被置1,seq=u,它等于前面已传送过的数据的最后一个字节的序号加1(FIN报文段即使不携带数据,也要消耗掉一个序号)。

2 第二次断开:服务器收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于它前面已传送过的数据的最后一个字节的序号加1。此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。

3 第三次断开:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发出FIN=1的连接释放报文段(注意: 此时确认号字段值仍为u+1, 因为这段时间里, 客户端并未发送任何数据到服务器)。

4 第四次断开:客户机收到连接释放报文段后,必须发出确认。在确认报文段中,ACK字段被置为1,确认号ack=w+1,序号seq=u+1。此时TCP连接还没有释放掉,必须经过时间等待计时器设置的时间2MSL后,A才进入到连接关闭状态。

3 网络层

1.IP报文

这里写图片描述 
各个字段说明

版本 IP协议版本号, IPv4此字段值为4, IPv6此字段值为6
首部长度 取值范围5(0101)~15(1111), 单位为4字节,包括固定部分和可选部分, 因此首部最长为60字节, 最短为20字节(不包括选项和填充部分);
服务类型 长度为8位(由于该字段一直弃而不用, 因此不用考虑)
总长度 该字段长度为16位, 以字节为单位, 总长度包含IP的头部和数据部分, IP数据报最大长度为65535字节, 但是注意最大不要超过MTU的长度
标识 16位长度, 唯一标识一个数据报,可以将之当成一个计数器, 每发送一个数据包, 则该值加1, 如果数据报分片,则每个分片的标识都一样, 各个分片共享一个标识号
标志 3位标志中第一位不使用, 第二位为DF(Don`t Fragment不分片), 如果该位为1, 并且传输的数据报超过最大传输单元(MTU), 则该数据报会被丢弃, 并发送一个ICMP差错报文; 第三位MF(More Fragment更多分片),表示是否有更多的分片, 如果该位为1, 则说明后续还有分片, 最后一片MF为0
片偏移 用以指出该分段的第一个数据字节在原始数据报中的偏移位置(以8字节为单位),IP分片后每一个分组都具有自己的首部, 而且标志位相同, 但是片偏移值不同, 通过片偏移值接收端可以重新组装IP包
生存时间(TTL) 表示数据报最多可经过的路由器的数量. 取值0~255,每经过一个路由器, TTL值减1,为0时被丢弃, 并发送ICMP报文通知源主机, TTL可以避免数据报在路由器之间不断循环(Tranceroute程序的实现原理)
协议类型 指明IP层上承载的是哪个高级协议, 在分用的过程中, 协议栈知道该交给上层的哪个协议处理, 如1为ICMP, 2为IGMP, 6为TCP, 17为UDP等.
头部校验和 保证数据报头部的数据完整性,但校验不包括数据部分。这样做的目的有二:一是所有将数据封装在IP数据包中的高层协议均含有覆盖整个数据的校验和,因此IP数据报没有必要再对其所承载的数据部分进行校验。二是每经过一个路由器,IP数据报的头部要发生改变(如TTL),而数据部分不变,这样只对发生改变的头部进行校验,显然不会浪费太多的时间。为了减少计算时间,一般不用CRC校验码,而是采用更简单的网际校验和(Internet Checksum)。
选项与填充 增加首部的可变部分是为了增加IP数据报的功能, 如支持排错, 测量以及安全等, 选项长度从1到40字节不等, 取决于所选择的项目(选项为4字节整数倍,否则用0填充); 但这样就增加了每一个路由器处理数据的开销, 实际上这些选项很少被使用, 很多路由器都并不考虑IP首部的选项字段;
2. IP:用来标识网络中的主机

IPV4:32位的无符号整数

局域网 : 
192.168.x.x 
172.16.x.x~172.31.x.x 
10.x.x.x

127.x.x.x 本地回环 (自播)地址

(主机号 全0 全1 不可用,一个代表网络,代表广播号)

广播号转换数据链路层时接收地址mac全 ffffff

A类 
8bit 网络号 +24bit 主机号

0.0.0.0 ~ 127.255.255.255

第一个字节(网络号)0XXX XXXX : 00000000 ~ 01111111 开头 
每个网络号内支持 2^24-2台主机 16777214台

B类 
16bit 网络号 +16bit 主机号

128.0.0.0 ~ 191.255.255.255

第一个字节(网络号)10XX XXXX : 00000000 ~ 10111111 开头

每个网络号内支持 2^16-2台主机 65534台

C类 
24bit 网络号 +8bit 主机号

192.0.0.0 ~ 223.255.255.255

第一个字节(网络号)110X XXXX : 00000000 ~ 11011111 开头

每个网络号内支持 2^8-2台主机 254台

D类、E类 
D类地址 组播用 
E类地址 网络测试用和保留 
D类E类不涉及主机号网络号的区分 
组播的应用

    使用组播的缘由是: 有的应用程序要把一个分组发送给多个目的主机. 不是让源主机给每一个目的主机都发送一个单独的分组, 而是让源主机把单个分组发送给一个组播地址, 该组播地址标识一组地址. 网络把这个分组给该组中的每一个主机都投递一份拷贝(单播与组播的比较示意图如上图所示). 主机可以选择加入/离开一个组, 从而一个主机可以同时属于多个组; 主机使用一个称作IGMP(因特网组管理协议)的协议加入组播组.

需要注意:

    (1)主机组播时仅发送一份数据, 只有数据在传送路径出现分岔时才将分组复制后继续转发. 这样对发送者而言, 数据只需发送一次就可以发送到所有接收者, 大大减轻了网络的负载和发送者的负担. 
    组播需要路由器的支持才能实现, 能够运行组播协议的路由器称为组播路由器.

IP组播地址

    IP组播使用D类地址格式. D类地址的前四位是1110, 因此D类地址范围为224.0.0.0~239.255.255.255. 每一个D类IP地址标志一个组播组;
    组播数据报和一般IP数据报的区别在于它使用D类IP地址仅作为目的地址, 并且首部中协议字段值为2, 表明使用IGMP协议. 需要注意的是:
    1)组播数据报也是”尽最大努力交付”, 不提供可靠交付(组播一定是仅应用于UDP);
    2)组播地址只能用于目的地址, 而不能用于源地址;
    3)组播数据报不产生ICMP差错报文. 因此, 若在ping命令后面键入组播地址, 则永远不会收到响应;
    4)并非所有的D类地址都可以作为组播地址;

点分十进制 
数值以点分十进制来表示 
1100 0000 (192) 10101000(168)0000 0101(5)0000 0001(1)

6464473601 二进制表示

每8位加个点 点分十进制

(192<< 3 * 8)+(168<< 2 * 8 )+(5 << 8)+ 1;

3.子网掩码(netmask)

子网划分

    一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网。划分子网纯属一个单位内部的事情。本单位以外的网络看不见这个网络是由多少子网组成,因为这个单位对外仍然表现一个网络。
    划分子网的方法是从网络的主机号借用若干位作为子网号subnet-id。划分子网增加了灵活性,但也减少了能够连接在网络上主机总数。于是两级IP地址在本单位内部就变为三级IP地址:
    IP地址 ::= {<网络号>,<子网号>,<主机号>}
    凡是从其他网络发送给本单位某个主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但此路由器在收到IP数据报后,在按目的网络号和子网号找到目的子网,把IP数据报交付给目的主机;

子网掩码概述

    子网掩码也是32位,由一串1和跟随的一串0组成。子网掩码中的1对应于IP地址中原来的网络号和子网号,而子网掩码中的0对应于现在的主机号。故将子网掩码和IP地址进行按位”与“运算(AND),就可得出网络地址, 由此可知:

A 类网络的缺省的子网掩码是  255.0.0.0
B 类网络的缺省的子网掩码是  255.255.0.0
C 类网络的缺省的子网掩码是  255.255.255.0(最常见)

不同的子网掩码可以得出相同的网络地址, 但不同的掩码的效果是不同的.

使用子网时分组的转发过程:

    使用子网划分后,路由表必须包含以下三项内容:{目的网络地址,子网掩码和下一跳地址}, 路由器转发分组的流程如下:
    1)从收到的数据报首部提取目的IP地址D;
    2)先判断是否为直接交付。对路由器直接相连的网络进行逐个检查:用各网络的子网掩码和D逐位相与,看结果是否和相对应的网络地址匹配。若匹配,则把分组进行直接交付,转发任务结束。否则就是间接交付,执行(3)。
    3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由,否则执行(4)。
    4)对路由表的每一行,用其中的子网掩码和D逐位相与,其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器,否则执行(5)。
    5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行(6)。
    6)报告转发分组出错。

ip地址 & 子网掩码 = 网络号 
ip地址 & 子网掩码取反 =主机号

子网掩码的1都是连续的

4.字节序

byteorder

0x12345678 内存由低到高来读

先读到 数值位较大 0x12 大端

先读到 数值位较小 0x78 小端

大端: 网络, mips ,powerpc moto

小段: x86

arm 硬件可选择大端小端

ip地址, 端口号 需要大端小端的转化;

4 链路层

CRC循环校验法

    在发送端, 先把数据划分为组, 假定每组K个比特(K位), 同时假定待传送的一组数据M=101001(K=6), 我们在M的后面再添加供差错检测用的N位冗余码一起发送.

    N位冗余码求解方法:
    首先,用二进制的模2运算[一种特殊的运算: 00得1, 11得1, 01得0, 10得0, 但不进位/退位]进行2^N乘M的运算, 这相当于在M后面添加N个0;
    然后, 用得到的(K+N)位的数除以事先选定好的长度为(N+1)位的除数P, 得出商为Q且余数是R, 余数R比除数P少1位, 即R是N位;
    最后,使用R替换N个0, 即得到要发送的数据.
    示例:
    假设现在K=6, M=101001, 设N=3, 除数P=1101, 则被除数为(2^N)*M = 101001000, 模2运算的结果为: 商110101, 余数R=001, 因此最终得到需要发送的数据位101001001

    接收端校验:
    接收端对收到的每一帧进行CRC校验如下:
    (1)若得出的余数R=0, 则判定这个帧没有差错, 接受accept;
    (2)若得出的余数R!=0, 则判定这个帧有差错, 丢弃abandon.

    注意:这种检测方法并不能确定究竟是哪一个/几个比特出了差错, 但是只要经过严格的挑选, 并使用位数足够多的除数P, 那么出现检测不到的差错的概率就很小很小了;
    因此仅用循环冗余校验CRC差错检验技术只能做到”无差错接受”.

MAC地址

    概念:MAC地址就是在链路层上使用的地址,也叫物理地址、硬件地址或链路地址,其被固化在适配器(网卡)的ROM中。可见MAC地址实际上就是适配器(网卡)地址或标识符。当某台计算机使用某块适配器后,适配器上的标识符就成为该计算机的MAC地址。MAC地址长度为6字节(48比特),由IEEE的注册管理结构RA进行管理分配。
    作用:MAC地址是计算机的唯一标识,在数据链路层中,交换机通过识别MAC地址进行数据包的传输。
    长度:12个16进制数  48bit

网络设备

    1)物理层用到的设备是中继器和集线器
    中继器的主要功能是对接收到的信号进行再生整形放大以扩大网络的传输距离(从一个网络电缆中接收信号, 放大它们, 然后将其送入下一个电缆)。
      集线器(HUB)就是将网线集中到一起的机器,也就是多台主机和设备的连接器。集线器的主要功能是对接收到的信号进行同步整形放大(同中继器),以扩大网络的传输距离; 与中继器的区别在于集线器能够提供多端口服务,也称为多端口中继器。

    2)数据链路层用到的设备是交换机和网桥
    交换机是一种基于MAC识别,能完成封装, 转发数据包功能的网络设备。它可以“学习”MAC地址,并把其存放在内部地址表中,当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口。交换机将局域网分为多个冲突域,每个冲突域都是有独立的宽带,因此大大提高了局域网的带宽。
    网桥就是个硬件网络协议翻译器, 在网络互联中可起到数据接收、地址过滤与数据转发的作用, 可用来实现多个不同网络系统之间的数据交换。

    3)网络层用到的设备是路由器
    路由器用于连接多个逻辑上分开的网络,具有路由和转发的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网(我们将在网络层对路由器有更详尽的描述)。

    4)应用层用到的设备是网关
    网关(协议转换器)是在网络层之上的具有协议转换功能的设施,所以称为设施,是因为网关不一定是一台设备,有可能在一台主机中实现网关功能。 
    网关分类:
      1)协议网关:协议网关通常在使用不同协议的网络区域间做协议转换。 
      2)应用网关:应用网关是在使用不同数据格式间翻译数据的系统。 
      3)安全网关:安全网关是各种技术的融合,具有重要且独特的保护作用,其范围从协议级过滤到十分复杂的应用级过滤。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值