网络通信(一)

1,网络通信基础

1.1,想实现网络通信,每台主机需具备四要素

  本机的IP地址
  子网掩码
  网关的IP地址
  DNS的IP地址

1.2,获取这四要素分两种方式

  1.静态获取      即手动配置 

    静态ip设置(eth0是网卡名称,以ubuntu为例)

    vim /etc/network/interfaces

        添加内容如下:

      auto lo

      iface lo inet loopback

      auto ens3

       iface ens3 inet static       # 改为静态

      address 192.168.8.212     # IP地址

      netmask 255.255.255.0   # 子网掩码

      gateway 192.168.1.1         # 网关

      dns-nameserver 114.114.114.114 # DNS

      iface ens3 inet6 auto      # 指定网卡

      uproute add -net 172.16.5.0/24 gw 192.168.10.100 eth1 # 可选,uproute是说网卡启动之后,的时候还有一些内部网络需要添加进来的时候

      down -route del -net 172.24.0.0/24   #可选, 机器宕机的时候会把这个网段相关的地址都删除了

    重启网络服务

      /etc/init.d/networking restart

    2.动态获取     通过DHCP(见本章3.9)获取
 

2,网络基础整理知识

  WebSocket 是独立的、创建在 TCP 上的协议。保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。是一种在单个TCP连接上进行全双工通信的协议。

2.1 简述TCP UDP 的区别以及优缺点?

  tcpudp是长链接和短链接,面向链接和无连接,tcp安全,不容易丢包,但是慢, tcp 粘包(数据流,会内容错乱,解决办法就是数据包中添加数据长度,顺序,采用分隔符,没有保护消息边界,针对数据流,一下发送连续数据,服务端会当成一个数据,udp没有这个危险,链式结构,并且一次只传送一个,,udp注重的是送到了就行不管丢不丢,比较快速,会出现丢包问题,

  TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

  TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOSDDOSCC等攻击

  UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDPTCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击……

  UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

  什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTPHTTPSFTP等传输文件的协议,POPSMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POPSMTP Putty,用的TelnetSSH QQ文件传输 …………

  什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……

TCPUDP区别总结:

  1TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

  2TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

  3TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

  4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

  5TCP首部开销20字节;UDP的首部开销小,只有8个字节

  6TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

2.2 cookie和session

  cookiesessioncookie在浏览器中,session在服务器中,都是作为验证用户的方式,cookie相对于不安全,便于模仿,session由服务器携带之后会有一个sessionid保存在cookie中,session 是加密的,但是耗费服务器性能,用户重要的信息可以用session,不重要的信息放在cookie中,一起使用 

  cookie session 的生成和具体的信息作用,都是用来维护状态的,因为http是无状态的,所谓的状态就是没有记忆功能,每次请求结束之后就会断开连接,哟获取之前的信息需要回传,

  从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

  Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。

  session不能区分路径,cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的.cookie只能是子路径访问父路径设置的cookie

  正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本。如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

  cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。

  当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识------------称为session id,如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session idsession id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

2.3 正向代理和反向代理?

  正向代理: 正向代理类似一个跳板机,代理访问外部资源。位于客户端和原始服务器之间,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

    用途:

    访问原来无法访问的资源,如 Google

    可以做缓存,加速访问资源。

    对客户端访问授权,上网进行认证。

    代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

  反向代理:反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。

    作用:

    保证内网的安全,通常将反向代理作为公网访问地址,Web 服务器是内网。

    负载均衡,通过反向代理服务器来优化网站的负载。

   总结:正向代理的对象是客户端,反向代理的对象是服务端。

 

3,网络通信协议

3.1,本机获取

  以ubuntu系统为例(命令基本一致,只是文件存放位置会不同):
    ifconfig -a:查看网络配置
    ifconfig [网口名] ip地址 : 设置本机IP地址
    在/etc/resolv.conf里面可以查看到本机的永久网络配置信息。
    ......

3.2,NAT协议

  NAT网络地址转换(Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

3.3,dns协议(基于udp协议,默认端口53,5353)

  DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将域名转换为IP地址。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个唯一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。

 13台根dns:

  A.root-servers.net198.41.0.4美国
  B.root-servers.net192.228.79.201美国(另支持IPv6)
  C.root-servers.net192.33.4.12法国
  D.root-servers.net128.8.10.90美国
  E.root-servers.net192.203.230.10美国
  F.root-servers.net192.5.5.241美国(另支持IPv6)
  G.root-servers.net192.112.36.4美国
  H.root-servers.net128.63.2.53美国(另支持IPv6)
  I.root-servers.net192.36.148.17瑞典
  J.root-servers.net192.58.128.30美国
  K.root-servers.net193.0.14.129英国(另支持IPv6)
  L.root-servers.net198.32.64.12美国
  M.root-servers.net202.12.27.33日本(另支持IPv6) 

  域名定义:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html

    顶级域名:以.com,.net,.org,.cn等等属于国际顶级域名,根据目前的国际互联网域名体系,国际顶级域名分为两类:类别顶级域名(gTLD)和地理顶级域名(ccTLD)两种。类别顶级域名是以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等结尾的域名,均由国外公司负责管理。地理顶级域名是以国家或地区代码为结尾的域名,如"CN"代表中国,"UK"代表英国。地理顶级域名一般由各个国家或地区负责管理。

    二级域名:二级域名是以顶级域名为基础的地理域名,比喻中国的二级域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
    一般来说,二级域名是域名的一条记录,比如alidiedie.com是一个域名,www.alidiedie.com是其中比较常用的记录,一般默认是用这个,但是类似*.alidiedie.com的域名全部称作是alidiedie.com的二级

3.4,HTTP协议

  GET / HTTP/1.1
  Host: www.google.com
  Connection: keep-alive
  User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Accept-Encoding: gzip,deflate,sdch
  Accept-Language: zh-CN,zh;q=0.8
  Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
  Cookie: … 

我们假定这个部分的长度为4960字节,它会被嵌在TCP数据包之中。

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。

  HTTP 协议包括哪些请求?

  GET:请求读取由URL所标志的信息。
  POST:给服务器添加信息(如注释)。
  PUT:在给定的URL下存储一个文档。
  DELETE:删除给定的URL所标志的资源。
  ...

3.5,  HTTP 中, POST  GET 的区别

  1)Get是从服务器上获取数据,Post是向服务器传送数据。

  2)Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中可以看到。

  3)Get传送的数据量小,不能大于2KB;Post传送的数据量较大,一般被默认为不受限制。
  4)根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
    I. 所谓 安全的 意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
    II. 幂等 的意味着对同一URL的多个请求应该返回同样的结果。

  GETPOST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同:

  GET 请求,请求的数据会附加在URL 之后,以?分割URL 和传输数据,多个参数用&连接。URL 的编码格式采用的是ASCII 编码,而不是uniclde,即是说所有的非ASCII 字符都要编码之后再传输。

  POST 请求:POST 请求会把请求的数据放置在HTTP 请求包的包体中。上面的item=bandsaw 就是实际的传输数据。

  因此,GET 请求的数据会暴露在地址栏中,而POST 请求则不会。

  5)传输数据的大小:

  在HTTP 规范中,没有对URL 的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL 的长度有限制。因此,在使用GET 请求时,传输数据会受到URL 长度的限制。

  对于POST,由于不是URL 传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,ApacheIIS 都有各自的配置。

  安全性:POST 的安全性比GET 的高。

  POST 请求的过程:

    1.浏览器请求tcp 连接(第一次握手)

    2.服务器答应进行tcp 连接(第二次握手)

    3.浏览器确认,并发送post 请求头(第三次握手,这个报文比较小,所以http 会在此时进行第一次数据发送)

    4.服务器返回100 continue 响应

    5.浏览器开始发送数据

    6.服务器返回200 ok 响应

  GET 请求的过程:

    1.浏览器请求tcp 连接(第一次握手)

    2.服务器答应进行tcp 连接(第二次握手)

    3.浏览器确认,并发送get 请求头和数据(第三次握手,这个报文比较小,所以http 会在此时进行第一次数据发送)

    4.服务器返回200 OK 响应

  GETPOST重大区别:

    GET产生一个TCP数据包;POST产生两个TCP数据包。

    对于GET方式的请求,浏览器会把http headerdata一并发送出去,服务器响应200(返回数据);

    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

3.6,TCP协议

  TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。

  TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。

   TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

  IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

   TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。

  TCP报文首部格式:

  TCP协议的三次握手和四次挥手:

  三次握手:
    client发送请求建立通道;
     server收到请求并同意,同时也发送请求建通道;
    client收到请求并同意,建立完成
   实践总结:

    1.第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

    2.第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;

    3.第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

  四次挥手:
     client发送请求断开通道;
     server收到请求并同意,同时还回复client上一条消息;
     server也发送请求断开通道;
     client受到消息结束
   实践总体:
    1.第一次挥手:主机1(可以使客户端,也可以是服务器端),设置Sequence NumberAcknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2;

    2.第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment NumberSequence Number1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我也没有数据要发送了,可以进行关闭连接了;

    3.第三次挥手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入CLOSE_WAIT状态;

    4.第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

  总结网络七层,物理层,数据链路层,IP层,TCP层,会话层,表示层,应用层

  三次握手,四次挥手,你好了吗,我好了,直接发送了,建立连接了,如果期间中断了,服务器会开启时间计数,两个小时会问一下, 然后每隔一段时间就会问一下, 问十次:关闭吗我没资源了,关闭吧我也没有资源了,那就关闭吧(此时服务器会开始时间计数),客户端也回复一个那就关闭吧(也会开始时间计数)

  注:seq:"sequance"序列号;ack:"acknowledge"确认号;SYN:"synchronize"请求同步标志;;ACK:"acknowledge"确认标志"FIN:"Finally"结束标志。

  TCP连接建立过程:首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

  TCP连接断开过程:假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

  为什么要三次挥手?

    举个打电话的例子:
    A:你好,我是A,你能听得见我说话吗      A->SYN_SEND
    B:听到了,我是B,你能听到我说话吗?   应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED
    A:嗯,听到了                       B->ESTABLISHED
    建立连接就ok了,三次联系

 

  在只有两次“握手”的情形下,假设Client想跟Server建立连接,但是却因为中途连接请求的数据报丢失了,故Client端不得不重新发送一遍;这个时候Server端仅收到一个连接请求,因此可以正常的建立连接。但是,有时候Client端重新发送请求不是因为数据报丢失了,而是有可能数据传输过程因为网络并发量很大在某结点被阻塞了,这种情形下Server端将先后收到2次请求,并持续等待两个Client请求向他发送数据...问题就在这里,Cient端实际上只有一次请求,而Server端却有2个响应,极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待,因而造成极大的资源浪费!所以,“三次握手”很有必要!

  为什么要四次挥手?

    A:“喂,我不说了。”A->FIN_WAIT1 
    B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2
    B:”好了,说完了,我也不说了。”B->LAST_ACK
    A:”我知道了。”A->TIME_WAIT | B->CLOSED
    A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED
  试想一下,假如现在你是客户端你想断开跟Server的所有连接该怎么做?第一步,你自己先停止向Server端发送数据,并等待Server的回复。但事情还没有完,虽然你自身不往Server发送数据了,但是因为你们之前已经建立好平等的连接了,所以此时他也有主动权向你发送数据;故Server端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!

  使用TCP的协议:FTP(文件传输协议)、Telnet(远程登录协议)、SMTP(简单邮件传输协议)、POP3(和SMTP相对,用于接收邮件)、HTTP协议等。

  什么是接口幂等性?接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。

3.7,IP协议

  TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)。

  IP数据包的标头长度默认为20字节,最大60字节,加上嵌入的TCP数据包,总长度最大变为65535字节。

   IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。

  IP位于TCP/IP模型的网络层(相当于OSI模型的网络层),它可以向传输层提供各种协议的信息,例如TCP、UDP等;对下可将IP信息包放到链路层,通过以太网、令牌环网络等各种技术来传送。

3.8,以太网协议

最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。

以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。

3.9,DHCP协议

  DHCP动态主机设置协议(Dynamic Host Configuration Protocol)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码

  DHCP封包在传输层( Transport Layer)是采用UDP协议,而当 Client传送给封包给 Server时,采用的是UDP 68 Port,从 Server传送给 Client则是使用UDP 67 Port

3.10,UDP协议

  UDP用户数据报协议,是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。

  UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。
  每个UDP报文分UDP报头和UDP数据区两部分。报头由四个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验值。UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:
  (1)源端口号;
  (2)目标端口号;
  (3)数据报长度;
  (4)校验值。
  使用UDP协议包括:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFS、BOOTP。
  TCP  UDP 的区别:TCP是面向连接的,可靠的字节流服务;UDP是面向无连接的,不可靠的数据报服务。

3.11,路由选择协议

  常见的路由选择协议有:RIP协议、OSPF协议。

  RIP协议 :底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是15跳,如果大于15跳,它就会丢弃数据包。

  OSPF协议 :Open Shortest Path First开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。

3.12,ARP/RARP协议

  地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。

  ARP工作流程举例:

  主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
  主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
  当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:
  (1)根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
  (2)如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
  (3)主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
  (4)主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
  (5)当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

  逆地址解析协议,即RARP,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址,比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。

  RARP协议工作流程:

  (1)给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
  (2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
  (3)如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
  (4)如果不存在,RARP服务器对此不做任何的响应;
  (5)源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

 

4,网络通信应用

4.1,服务器端响应 

    举个例子  

  经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。

  根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的”HTTP请求”,接着做出”HTTP响应”,再用TCP协议发回来。

  本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信。

  操作:

  在浏览器中输入 www.baidu.com  后执行的全部过程

  现在假设如果我们在客户端(客户端)浏览器中输入http://www.baidu.com,而baidu.com为要访问的服务器(服务器),下面详细分析客户端为了访问服务器而执行的一系列关于协议的操作:

  1)客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。

  2)在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。

  3)客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。

  4)客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

4.2,HTTPS 是如何实现安全传输数据的?

  1. 客户端(通常是浏览器)先向服务器发出加密通信的请求

  2. 服务器收到请求,然后响应

  3. 客户端收到证书之后会首先会进行验证

  4. 服务器收到使用公钥加密的内容,在服务器端通过一定的算法得出session KeyMAC算法秘钥,作为后面交互过程中使用对称秘钥。同时客户端也会使用同样的算法生成session KeyMAC算法的秘钥。

  5. 然后再后续的交互中就使用session KeyMAC算法的秘钥对传输的内容进行加密和解密。

4.3,HTTPHTTPS协议有什么区别?

  http协议是超文本传输协议,被用于在web浏览器和网站服务器之间传递信息。http协议工作是以明文方式发送内容,不提供任何形式的数据加密,而这也是很容易被黑客利用的地方,如果黑客截取了web浏览器和网站服务器之间的传输信息,就可以直接读懂其中的信息,因此http协议不适合传输一些重要的、敏感的信息,比如信用卡密码及支付验证码等。

  安全套接字层https协议就是为了解决http协议的这一安全缺陷而出生的,为了数据传输的安全,httpshttp的基础上加入了ssl协议,ssl依靠证书来验证服务器的身份,为浏览器和服务器之间的通信加密,这样的话即使黑客借去了发送过程中的信息,也无法破解读懂它,我们网站及用户的信息便得到了最大的安全保障。

  https协议需要到ca申请证书,一般免费证书很少,需要费用。

  http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议

  httphttps使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443

  http的连接很简单,是无状态的, HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全 

4.4,HTTP状态码的划分,说出几个常见的状态

状态码

定义

1xx 报告

接收到请求,继续进程

2xx 成功

步骤成功接收,被理解,并被接受 (200)

3xx 重定向

为了完成请求,必须采取进一步措施 (301302304)

4xx 客户端出错

请求包括错的顺序或不能完成 (400403404405)

5xx 服务器出错

服务器无法完成显然有效的请求(500502504

 

  DNS(解析域名,分配最优IP,会先检查本地DNS,然后逐级找,最后是根服务器),CDN(负载均衡,分配资源,压缩等),HTTPDNSDNS进阶版,会在DNS之前先访问HTTPDNS

4.5,端口如何映射?

   一台机器请求服务携带IP,端口,NAT网关信息,然后NAT(网络地址转换)根据具体信息返回数据,有公有IP(就是外网唯一可识别的地址)以及私有IP(由公网下不同的服务器分出来的),分为机器的动态请求公网和NAT主动请求数据,会话会一直存在,WAN接收外部IPLAN接收内部IP,属于内部交换机,连接设备,网线,WLAN,数据通过电磁波连接,就是无线,具体和框架的构成连接,比如DNS负载均衡,哪些可以联系起来

 

posted @ 2021-02-22 17:18  雅痞六爷  阅读(379)  评论(0)    收藏  举报