TCP/IP协议

1. TCP/IP的OSI七层模型

  • TCP工作在第四层——Transport层,数据叫Segment
  • IP在第三层——Network层,数据叫Packet
  • ARP在第二层——Data Link层,数据叫Frame

2. TCP

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 


2.1 TCP头部

上面就是TCP协议头部的格式,是理解其它内容的基础,下面就将每个字段的信息都详细的说明一下。

  • Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号;用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接;

  • Sequence Number:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节在数据流中的序号;主要用来解决网络报乱序的问题;

  • Acknowledgment Number:32位确认序列号包含发送确认的一端所期望收到的下一个序号,因此,确认序号应当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字段才有效。主要用来解决不丢包的问题;

  • Offset:给出首部中32 bit字的数目,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能表示15个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是20字节;

  • TCP Flags:TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次为URG,ACK,PSH,RST,SYN,FIN。每个标志位的意思如下:

URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据;

ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0;

PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队;

RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;

SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手;

FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。

重要的信息:

ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。

FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。


TCP的可靠连接参考文章:戳一下

3. UDP(User Datagram Protocol)

用户数据报协议,提供面向事务的简单不可靠信息传送服务。

将网络数据流压缩成数据包的形式。每一个数据包的前8个字节保存包头信息,剩余的包含具体的传输数据。

虽然UDP是不可靠的传输协议,但它是分发信息的理想协议,例如在屏幕上报告股票市场、显示航空信息;

在路由信息协议RIP(Routing Information Protocol)中修改路由表、QQ聊天、迅雷、网络电话等。

TCP的效率不一定比UDP低,只要窗口足够大,TCP也可以不受往返时间的约束而源源不断地传数据。

1)UDP的优势

1. UDP 协议的头长度不到TCP头的一半,所以同样大小的包里UDP携带的净数据比TCP包多,

2. 没有Seq和Ack等概念,省去了建立连接的开销,DNS解析就使用UDP协议。

2)UDP的劣势

1. 超过MTU的时候,发送方的网络层负责分片,接收方收到分片后再组装起来,这个过程会消耗资源,降低性能。

2. 没有重传机制,丢包由应用层处理,某个写操作有6个包,当有一个丢失的时候,就要将6个包重新发送。

 

3. 分片机制存在弱点,接收方是根据包中的“More fragments”的flag来判断是否包已接收完,1表示还有分片,0表示最后一个分片,可以组装了。

如果持续发送flag为1的UDP,接收方无法组装,就有可能耗尽内存。

 

4. HTTP协议

HTTP(HyperText Transfer Protocol)超文本传输协议,HTTP是一个应用层协议,无状态,由请求和响应构成,是一个标准的客户端服务器模型。

HTTP工作流程如下:

 

 

下面是报文首部字段的说明,表格的摘自《图解HTTP》。

HTTP请求头域:

 Accept 用户代理能够处理的媒体类型(MIME)及媒体类型的相对优先级,“text/plain;q=0.3”
 Accpet-Charset 通知服务器用户代理支持的字符集及字符集的相对优先顺序,“iso-8859-5”
 Accept-Encoding 告知服务器用户代理支持的内容编码及优先级顺序“gzip,deflate”
 Accept-Language 告知服务器用户代理能够处理的自然语言集及优先级,“zh-cn,zh;q=0.7”
 Authorization 用户代理的认证信息(证书值),“Basic dWVub3NlbjpwYNzd==”
 Expect 期望出现的某种特定行为,错误时返回“417 Expectation Failed”,“100-continue”
 From 用户的电子邮箱地址,为了显示搜索引擎等用户代理负责人的联系方式,“info@ha.com”
 Host 请求的资源所处的互联网主机名和端口号,必须包含在请求头中,“www.hh.com”
 If-Match 条件请求,只有当If-Match字段值与ETag匹配才会接受请求,否则返回“412 Precondition Failed”
 If-Modified-Since 若字段值早于资源的更新时间(Last-Modified),资源未更新,返回“304 Not Modified”
 If-None-Match 与If-Match相反
 If-Range 字段值和请求资源的ETag或时间一致时,作为范围请求处理,反之,返回全体资源
 If-Unmodified-Since 与If-Modified-Since作用相反
 Max-Forwards 以十进制整数形式指定可经过的服务器最大数目。服务器转发一次,减少1,当为0就不进行转发
 Proxy-Authorization 接收从代理服务器发来的认证质询时,发送此字段,告知服务器认证所需要的信息
 Range 只需获取部分资源的范围请求,“5001-10000”从5001字节到10000字节的资源。
 Referer 请求的原始资源的URI,也就是上一页
 TE 客户端能够处理响应的传输编码方式及相对优先级,还可指定Trailer字段分块传输编码的方式。“gzip,deflate;q=0.5”
User-Agent 创建请求的浏览器和用户代理名称等信息

 

HTTP应答头域:

 Accpet-Ranges 告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。“bytes”
 Age 源服务器在多久前创建了响应,字段值单位为秒
 ETag 客户端实体标识,一种可以将资源以字符串形式做唯一标识的方式
 Location 将响应接收方引导至某个与请求URI位置不同的资源,会配置3xx:Redirection的响应
 Proxy-Authenticate 由代理服务器所要求的认证信息发送给客户端
 Retry-After 告知客户端应该在多久(秒数或具体日期)之后再次发送请求,主要配合“503 Service Unavailable”或“3xx Redirect”。
 Server 当前服务器上安装的HTTP服务器应用程序的信息,包括版本号等。“Apache/2.2.6 (Unix) PHP/5.2.5”
 Vary 对缓存进行控制,设置“Accept-Language”,如果字段值相同,就从缓存返回响应。
 WWW-Authenticate HTTP访问认证,告知客户端适用于访问请求URI所指定资源的认证方案(Basic或Digest)和带参数提示的质询(challenge)

 

HTTP通用头域:

Cache-Control操作缓存的工作机制,多个指令用“,”分割,“private,max-age=0,no-cache”
Connection控制不再转发给代理的首部字段与管理持久连接,“keep-alive”
DateHTTP报文的日期和时间
PragemaHTTP1.1之前的遗留字段,作为向后兼容定义,只用在客户端发送的请求中。“no-cache”
Trailer说明在报文主体后记录了哪些首部字段,可应用在分块编码传输时。在报文最后写了重要信息
Transfer-Encoding传输报文主体时采用的编码方式,分块传输“chunked”
Upgrade检测HTTP协议及其他协议是否可使用更高版本进行通信
Via追踪客户端与服务器之间的请求和响应报文的传输路径,各个代理服务器会往Via添加自己的服务器信息
Warning告知用户一些与缓存相关问题的警告

 

HTTP实体头域:

 Allow 告知客户端能够支持Request-URI指定资源的所有HTTP方法,“GET,HEAD”。当不支持,会返回“405 Method Not Allowed”
 Content-Encoding 服务器对实体的主体部分选用的内容编码方式,在不丢失内容的前提下进行压缩。“gzip”
 Content-Language 实体主体使用的自然语言(中文或英文等)
 Content-Length 主体部分的大小(单位是byte)
 Content-Location 给出与报文主体部分相对应的URI,与Location不同
 Content-MD5 一串由MD5算法生成的值,目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达
 Content-Range 针对范围请求,作为响应返回的实体的哪个部分符合范围请求,单位为byte。“bytes 5001-10000/10000”
 Content-Type 实体主体内对象的媒体类型,与Accpet一样,字段值用type/subtype形式赋值。“text/html; charset=UTF-8”
 Expires 将资源失效的日期告知客户端。当首部字段Cache-Control有指定max-age指令时,优先处理max-age指令
 Last-Modified 指明资源最终修改时间,一般来说,这个值就是Request-URI指定资源被修改的时间

详细信息可以参考MDN的《HTTP Headers

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准,一种通知客户端其接收文件的多样性的机制,文件后缀名在网页上并没有明确的意义。

5、HTTPS协议

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)基于SSL的HTTP协议,HTTP的安全版。

使用端口43,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输和身份认证的网络协议。

6、 HTTPS的连接建立流程

HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。在传输的过程中会涉及到三个密钥:

  • 服务器端的公钥和私钥,用来进行非对称加密
  • 客户端生成的随机密钥,用来进行对称加密

如上图,HTTPS连接过程大致可分为八步:

  1. 客户端访问HTTPS连接:客户端会把安全协议版本号、客户端支持的加密算法列表、随机数C发给服务端。
  2. 服务端发送证书给客户端:服务端接收密钥算法配件后,会和自己支持的加密算法列表进行比对,如果不符合,则断开连接。否则,服务端会在该算法列表中,选择一种对称算法(如AES)、一种公钥算法(如具有特定秘钥长度的RSA)和一种MAC算法发给客户端。服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。在发送加密算法的同时还会把数字证书和随机数S发送给客户端
  3. 客户端验证server证书:会对server公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续。
  4. 客户端组装会话秘钥:如果公钥合格,那么客户端会用服务器公钥来生成一个前主秘钥(Pre-Master Secret,PMS),并通过该前主秘钥和随机数C、S来组装成会话秘钥
  5. 客户端将前主秘钥加密发送给服务端:是通过服务端的公钥来对前主秘钥进行非对称加密,发送给服务端
  6. 服务端通过私钥解密得到前主秘钥:服务端接收到加密信息后,用私钥解密得到主秘钥。
  7. 服务端组装会话秘钥:服务端通过前主秘钥和随机数C、S来组装会话秘钥。至此,服务端和客户端都已经知道了用于此次会话的主秘钥。
  8. 数据传输:客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。同理,服务端收到客户端发送来的密文,用服务端密钥对其进行对称解密,得到客户端发送的数据。

2)SSL

SSL(Secure Sockets Layer)安全套接层,TLS(Transport Layer Security)传输层安全是其继任者。

SSL和TLS在传输层对网络连接进行加密。

SSL协议分为两层,SSL记录协议(SSL Record Protocol)和SSL握手协议(SSL Handshake Protocol)。

SSL记录协议建立在TCP之上,提供数据封装、压缩加密基本功能的支持。

SSL握手协议建立在SSL记录协议之上,在数据传输之前,通信双方进行身份认证、协商加密算法和交换加密秘钥等。

SSL工作分为两个阶段,服务器认证和用户认证。

SSL协议既用到了公钥加密(非对称加密)又用到了对称加密技术。

3)数据包

客户端与服务器之间的通信:

  • 1.客户端发出请求(Client Hello)
  • 2.服务器响应(Server Hello)
  • 3. 证书信息
  • 3.密钥交换
  • 4.应用层信息通信

用户可以发送通过TLS层使用RC4的写实例加密过的普通HTTP消息,也可以解密服务端RC4写实例发过来的消息。

此外,TLS层通过计算消息内容的HMAC_MD5哈希值来校验每一条消息是否被篡改。

6.IP网际协议

IP是TCP/IP中最为核心的协议,所有的TCP、UDP、ICMP等协议均以IP数据报的格式传输。IP协议提供不可靠、无连接的服务,它不保证数据报一定可以送达目的,也不保证数据报的先后次序。

IP首部格式为

ip header

注:网络字节序:32bit传输的次序为0-7bit, 8-15bit, 16-23bit, 24-31bit(即big endian字节序)

IP路由

IP路由选择是逐跳进行的。IP并不知道到达任何目的的完整路径(当然,除了那些与主机直接相连的)。所有的IP路由选择只为数据报传输提供下一站路由器的I P地址。它假定下一站路由器比发送数据报的主机更接近目的,而且下一站路由器与该主机是直接相连的。

IP路由选择主要完成以下这些功能:

1) 搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。 2) 搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。关于这一点我们在下一节中进行讨论。 3) 搜索路由表,寻找标为“默认”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。

如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。

IP路由选择是通过逐跳来实现的。数据报在各站的传输过程中目的IP地址始终不变,但是封装和目的链路层地址在每一站都可以改变。大多数的主机和许多路由器对于非本地网络的数据报都使用默认的下一站路由器。

IP路由选择机制的两个特征: (1)完整主机地址匹配在网络号匹配之前执行 (2)为网络指定路由,而不必为每个主机指定路由

IP地址和MAC地址分类

按IP地址范围划分

  • A类:地址范围1.0.0.1-126.255.255.255,A类IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256的3次方-2=16777214台。
  • B类:地址范围128.0.0.1-191.255.255.255,B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256的2次方-2=65534台
  • C类:地址范围192.0.1.1-223.255.255.255,C类IP地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台
  • D类:以1110开始的地址,多播地址
  • E类:以11110开始的地址,保留地址

按照通讯模式划分

  • 单播:目标是特定的主机,比如192.168.0.3
  • 广播:目标IP地址的主机部分全为1,并且目的MAC地址为FF-FF-FF-FF-FF-FF。比如B类网络172.16.0.0的默认子网掩码为255.255.0.0,广播地址为172.16.255.255。
  • 多播:目标为一组主机,IP地址范围为224.0.0.0~239.255.255.255。多播MAC地址以十六进制值01-00-5E打头,余下的6个十六进制位根据IP多播组地址的最后23位转换得到。

单播是对特定的主机进行数据传送。如给某一个主机发送IP数据包,链路层头部是非常具体的目的地址,对于以太网来 说,就是网卡的MAC地址。广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。

  • 广播是针对某一个网络上的所有主机发包,这个网络可能是网络,可能是子网,还可能是所有的子网。如果是网络,例如A类网址的广播就是 netid.255.255.255,如果是子网,则是netid.netid.subnetid.255;如果是所有的子网(B类IP)则是则是 netid.netid.255.255。广播所用的MAC地址FF-FF-FF-FF-FF-FF。网络内所有的主机都会收到这个广播数据,网卡只要把 MAC地址为FF-FF-FF-FF-FF-FF的数据交给内核就可以了。一般说来ARP,或者路由协议RIP应该是以广播的形式播发的。
  • 多播就是给一组特定的主机(多播组)发送数据,这样,数据的播发范围会小一些。多播的MAC地址是最高字节的低位为一,例 如01-00-00-00-00-00。多播组的地址是D类IP,规定是224.0.0.0-239.255.255.255。与IP多播相对应的以太网地址范围从0 1 : 0 0 : 5 e : 0 0 : 0 0 : 0 0到01: 00: 5e: 7f: ff: ff。通过将其低位23 bit映射到相应以太网地址中便可实现多播组地址到以太网地址的转换。由于地址映射是不唯一的,因此要其他的协议实现额外的数据报过滤。

子网掩码

子网掩码用来确定多少bit用于网络号和多少bit用于主机号。

给定IP地址和子网掩码以后,主机就可以确定IP数据报的目的是: (1)本子网上的主机; (2)本网络中其他子网中的主机; (3)其他网络上的主机。

如果知道本机的IP地址,那么就知道它是否为A类、B类或C类地址(从IP地址的高位可以得知),也就知道网络号和子网号之间的分界线。而根据子网掩码就可知道子网号与主机号之间的分界线。

7、运维工具

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值