精华内容
下载资源
问答
  • //显示用户IP地址 Response.Write("Url属性:" + Request.Url.ToString() + " "); //显示页面网址 Response.Write("PhysicalPath属性:" + Request.PhysicalPath.ToString() + " "); //显示页面的物理...
  • IP地址科普

    2018-08-28 05:15:47
    导读 上一篇中提到了通过DNS解析从URL解析获得IP地址,...什么是IP地址 IP地址二进制到十进制的转换 IP地址的分类 番外 什么是IP地址 首先需要明确什么是地址,地址是用来标记地点的。你寄快递或者发送邮件都会有一...
        

    导读

    上一篇中提到了通过DNS解析从URL解析获得IP地址,但是除了记忆方便之外,获取IP地址还有什么好处吗?或者说为什么需要IP地址。这篇文章将浅显的讲解一下IP地址的内容。

    • 什么是IP地址
    • IP地址二进制到十进制的转换
    • IP地址的分类
    • 番外

    什么是IP地址

    首先需要明确什么是地址地址是用来标记地点的。你寄快递或者发送邮件都会有一个收件人地址和发件人地址,这是为了让快递或者邮件能够正确的送到收件人手中,以及当收件人信息出现错误的时候能够将邮件返还给发件人并告知发送失败的原因。

    同样在网络中使用ip地址来标记一台主机,且在同一网段中同一个ip地址只可能出现一次,就好比快递员送快递,在同一个小区有两幢楼都编号6,那快递员就不知道把快递送去哪个楼了。

    ip地址其实分为两类,我们常见的叫做IPV4( Internet Protocol Version 4 )互联协议版本4,有版本V4之前就有IPV1 IPV2 IPV3,同样有IPV5 IPV6,IPV5在实验中已经夭折,替代IPV4的将是IPV6。(IPV4地址比如:192.168.1.1114.114.114.114,IPV6地址比如:2001:4860:4860::8888

    互联网通过ip地址将各个计算机连接起来

    IP地址二进制到十进制的转换

    我们平时看到的ip地址是类似192.168.1.1这种十进制.分隔的形式,但在计算机的世界里都是以二进制的形式存在的。这里涉及到一个二进制和十进制的转换。

    二进制====>十进制

    求11000000的二进制表示,一共是8位,最低位的权重是0,最高位是7,如果对应位为1则乘以2^(n-1),否则0乘以2^(n-1)

    1*2^7 + 1*2^6 + 0*2^5 + 0*2^4 + 0*2^3 + 0*2^2 + 0*2^1 + 0*2^0 = 192

    十进制====>二进制

    求192的二进制表示,将192不断除以2求余数,然后一直用获得的商不断往下除,最后倒着将余数连起来就是二进制表示11000000

    192 / 2 = 96 ------ 0
    96 / 2 = 48 ------ 0
    48 / 2 = 24 ------ 0
    24 / 2 = 12 ------ 0
    12 / 2 = 6 ------ 0
    6 / 2 = 3 ------ 0
    3 / 2 = 1 ------ 1
    1 / 2 = 0 ------ 1
    二进制表示 11000000

    其实计算快速的话,还能用拼凑法。8位每一位对应的十进制表示是128 64 32 16 8 4 2 1,将192拼凑成前面几个数字的和,然后用来哪个数字就在哪一位置1。192=128+64,所以前两位为1,二进制为11000000。

    IP地址的分类

    IP地址类型分为A、B、C、D、E

    A、B、C类:我们生活中常用的类型的IP地址

    D类:组播地址在路由协议的时候会讲到几个常用的几个,用户组播地址在CCIE中学习。

    E类:仅供Internet实验和开发

    注:A类前一位为0,B类前两位为10(其他位任意);C类前三位为110(其他位任意);D类前四位为1110(其他位任意);E类前五位为11110(其他位任意),其中127和0开头的为特殊地址;

    ABC类地址的网络部分和主机部分

    按照是否有固定的子网掩码,还可以分为有类无类

    有类(主类) IP地址主要分为A、B、C类,每种类型固定的掩码。

    无类 IP地址无论哪种类型的IP地址都没有固定掩码。

    其中子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。 用来划分不同的网段。

    番外

    1.查看ip地址的方式

    ## Ubuntu
    ifconfig
    ## windows
    ipconfig

    2.一种简单的确定网站ip的方式

    ping www.baidu.com

    3.爬虫与反爬虫

    在反爬虫技巧中有一种方法是根据访问者的ip进行查封。当同一个ip短时间内大量出现,超过正常ip访问的次数的时候有的网站为了保护服务器会对该ip采取惩罚措施使其在一段时间内无法访问网站的服务。所以写爬虫的工程师一般会采用代理去访问被抓去的网站服务器,不断的切换代理地址来避免ip被封。

    Reference

    展开全文
  • 网吧路由器ip地址与设置客户机的MAC与如果不做绑定,可以只做路由器的基本上网设置,IP地址URL,MAC地址,这三项过滤功能主要帮助网吧防止内部网络的用户访问非法网站,感兴趣的朋友可以了解下本
  • 前言前面介绍了应用层的DNS协议 你知道上网时输入的URL是怎么解析成IP地址的吗?一文带你搞懂DNS,我们知道了DNS可以将域名映射成IP地址。今天给大家介绍下应用层另一个协议——动态主机配置协议DHCP。我们的PC在和...
    cc23336ac8db624811130dd9ee7e921d.png

    前言

    前面介绍了应用层的DNS协议 你知道上网时输入的URL是怎么解析成IP地址的吗?一文带你搞懂DNS,我们知道了DNS可以将域名映射成IP地址。

    今天给大家介绍下应用层另一个协议——动态主机配置协议DHCP

    我们的PC在和网络中的其他终端通信时需要获取一个IP地址,这个IP地址可以手动配置,也可以通过DHCP协议动态获取今天就来看下我们的PC是如何动态获取到IP地址的?

    正文

    1为什么需要DHCP动态分配IP地址? DHCP和手动配置IP的优缺点?

    手动配置IP地址

    操作简单,但是在局域网容易造成IP地址冲突,如果终端数量较多需要一台台配置,工作量大。

    使用DHCP动态分配IP地址:

    可以减少管理员的工作量,避免用户手工配置网络参数时造成的地址冲突。

    2什么是DHCP协议

    DHCP(动态主机配置协议)应用层的网络协议,可以用于给客户端动态分配IP地址和子网掩码。DHCP基于服务器-客户端的模式进行工作。

    3DHCP的工作原理

    DHCP协议是基于客户端-服务器模式的,为了动态获取IP地址和子网掩码配置信息,DHCP客户端需要和DHCP服务器进行报文交互

    95b620d695dffc56b77d98e2ad145a7f.png

    1、DHCP客户端发送DHCP Discover广播报文来发现DHCP服务器。(询问谁可以为我分配IP地址。)

    2、DHCP服务器在收到DHCP Discover报文后,会选取一个未分配的IP地址,向DHCP客户端发送DHCP提供报文(DHCP Offer),此报文中包含IP地址等配置信息。如果存在多个DHCP服务器,每个DHCP服务器都会响应。(告诉DHCP客户端我可以给你提供服务)

    3、如果有多个DHCP服务器向DHCP客户端发送DHCP提供报文,DHCP客户端将会选择收到的第一个DHCP提供报文,然后发送DHCP Request报文,报文中包含请求的IP地址。(告诉所有的DHCP服务器我选择哪个服务器给我分配的地址)

    4、DHCP服务器在收到DHCP Request报文后,会回应一个DHCP Ack报文。(告诉DHCP客户端我知道了)

    地址冲突检测:

    DHCP客户端收到DHCP Ack报文后,会发送免费ARP报文,检查网络中是否有其他主机使用分配的IP地址。

    1、如果指定时间内没有收到ARP应答,DHCP客户端会使用这个IP地址。

    2、如果有主机使用该IP地址,DHCP客户端会向DHCP服务器发送DHCP拒绝报文,通知服务器该IP地址已被占用。然后DHCP客户端会向服务器重新申请一个IP地址。

    DHCP地址续租:

    a2987824e49974e95d874343eb454028.png

    在使用租期超过50%时刻处DHCP Client会以单播形式向DHCP Server发送DHCP Request报文来续租IP地址。

    1、如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;

    2、如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。

    03fdaf126cb762d5ca91208ba6f992e7.png

    在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCP Request报文来续租IP地址。

    1、如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;

    2、如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。

    注意:

    从上面我们知道DHCP客户端经历了从DHCP服务器动态获取IP地址续租IP地址最后释放IP地址的生命周期。

    4DHCP报文类型和报文格式:

    f726c030d99dfb63c99c562f12d70e95.png

    DHCP 协议提供了多种类型的报文,但是基本格式是相同的,不同类型的报文只是报文中的某些字段值不同。

    DHCP 报文的基本格式如图所示:

    1c4535892059adc8732b45a3442fb282.png

    上图中每个字段含义如下:

    • op:报文的操作类型。分为请求报文和响应报文。客户端发送给服务器的包为请求报文,值为 1;服务器发送给客户端的包为响应报文,值为 2。

    • htype:DHCP 客户端的 MAC 地址类型。MAC 地址类型其实是指明网络类型,htype 值为 1 时表示为最常见的以太网 MAC 地址类型。

    • hlen:硬件地址长度。以太网 MAC 地址长度为 6 个字节,即 hlen 值为 6。

    • hops:跳数,DHCP 报文经过的中继数量。每经过一个路由器,该字段就会增加 1。如果没有经过路由器,则值为 0(同一网内)。

    • xid:事务 ID。客户端发起一次请求时选择的随机数,用来标识一次地址请求过程。在一次请求中所有报文的 xid 都是一样的。

    • secs:DHCP 客户端从获取到 IP 地址或者续约过程开始到现在所过去的时间,以秒为单位。在没有获得 IP 地址前,该字段始终为 0。

    • flags:BOOTP 标志位。只使用第 0 比特位,是广播应答标识位,用来标识 DHCP 服务器应答报文是采用单播还是广播发送。其中,0 表示采用单播发送方式,1 表示采用广播发送方式。其余位尚未使用。

    • ciaddr:DHCP 客户端的 IP 地址。仅在 DHCP 服务器发送的 ACK 报文中显示,在其他报文中均显示为 0。这是因为在得到 DHCP 服务器确认前,DHCP 客户端还没有分配到 IP 地址。

    • yiaddr:DHCP 服务器分配给客户端的 IP 地址。仅在 DHCP 服务器发送的 Offer 和 ACK 报文中显示,其他报文中显示为 0。

    • siaddr:为 DHCP 客户端分配 IP 地址等信息的其他 DHCP 服务器 IP 地址。仅在 DHCP Offer、DHCP ACK 报文中显示,其他报文中显示为 0。

    • giaddr:转发代理(网关)IP 地址,DHCP 客户端发出请求报文后经过的第一个 DHCP 中继的 IP 地址。如果没有经过 DHCP 中继,则显示为 0。

    • chaddr:DHCP 客户端的 MAC 地址。在每个报文中都会显示对应 DHCP 客户端的 MAC 地址。

    • sname:为客户端分配 IP 地址的服务器名称(DNS 域名格式)。只在 DHCP Offer 和 DHCP ACK 报文中显示发送报文的 DHCP 服务器名称,其他报文显示为 0。

    • file:DHCP 服务器为 DHCP 客户端指定的启动配置文件名称及路径信息。仅在 DHCP Offer 报文中显示,其他报文中显示为空。

    • options:可选选项,格式为“代码+长度+数据”。

    5DHCP的应用场景:

    在大型网络中,会有大量的主机或设备需要获取IP地址等网络参数时,使用DHCP协议动态分配地址。

    6实战:

    DHCP地址池

    在做实验前先讲下DHCP地址池。

    DHCP服务器的地址池是用来定义分配给主机的IP地址范围,DHCP支持配置两种地址池,包括全局地址池接口地址池

    1、接口地址池为连接到同一网段的主机或终端分配IP地址。

    可以在服务器的接口下执行dhcp select interface命令,配置DHCP服务器采用接口地址池的DHCP服务器模式为客户端分配IP地址。

    2、全局地址池为所有连接到DHCP服务器的终端分配IP地址。

    可以在服务器的接口下执行dhcp select global命令,配置DHCP服务器采用全局地址池的DHCP服务器模式为客户端分配IP地址。

    接口地址池的优先级比全局地址池高。配置了全局地址池后,如果又在接口上配置了地址池,客户端将会从接口地址池中获取IP地址。

    实验配置:在ENSP模拟器上模拟客户端通过DHCP获取IP地址

    1、搭建拓扑图如下:

    eb1122d58396ae058e504971dc424d08.png

    2、配置PC1的IP地址获取方式为DHCP

    2eee2d21b59050d5a819c11d96f2a4f5.png

    3、在R1路由器下做DHCP配置,采用接口地址池分配IP地址:

    #

    dhcp enable

    #

    interface Ethernet0/0/0

    ip address 10.1.1.1 255.255.255.0

    dhcp select interface

    dhcp server excluded-ip-address 10.1.1.2

    dhcp server lease day 3 hour 0 minute 0

    dhcp server dns-list 10.1.1.2

    #

    dhcp enable命令用来使能DHCP功能。在配置DHCP服务器时,必须先执行dhcp enable命令,才能配置DHCP的其他功能并生效。

    dhcp select interface命令用来关联接口和接口地址池,为连接到接口的主机提供配置信息。在本示例中,接口Ethernet 0/0/0被加入接口地址池中。

    dhcp server dns-list命令用来指定接口地址池下的DNS服务器地址。

    dhcp server excluded-ip-address命令用来配置接口地址池中不参与自动分配的IP地址范围。

    dhcp server lease命令用来配置DHCP服务器接口地址池中IP地址的租用有效期限功能。缺省情况下,接口地址池中IP地址的租用有效期限为1天。

    4、配置完成后通过ipconfig命令在PC1上查看IP地址获取情况。

    696dc152d6725cbdec3905f227c25ef5.png

    可以看到PC1获取了IP地址为10.1.1.254,子网掩码为255.255.255.0,DNS服务器地址为10.1.1.2

    7 Wireshark抓包获取 DHCP 请求 IP 地址时的每种报文。

    如下图所示为DHCP的四次握手的交互报文

    e850a98fe91e52208ecc3c7ff150da39.png

    1、该数据包是客户端向服务器发送的 DHCP Discover 数据包。

    e9060dcf81144bd536f25df4b6b02228.png

    在上图中,由于当前客户端还没有 IP 地址,所以源 IP 地址为 0.0.0.0;客户端是向网络中所有服务器进行发送,使用的是广播包,所以目标 IP 地址为 255.255.255.255

    2、该数据包是 DHCP 服务器收到客户端 DHCP Discover 广播包后返回的 DHCP Offer 包。

    c01d0c80dfb584e9f5d91bd6d0c8bf5d.png

    由于是 DHCP 服务器给 DHCP 客户端发送提供的地址信息。因此,报文中应该包含 DHCP 服务器提供给客户端的 IP 地址信息,这里为 10.1.1.254;提供给客户端的子网掩码信息这里为 255.255.255.0

    3、该数据包是 DHCP 客户端向网络中所有 DHCP 服务器主机发出的 DHCP Request 消息。

    95c0a28d704307ef66fd6f2656575121.png


    由于此时客户端还没有真正拥有IP地址,因此源 IP 地址仍然为 0.0.0.0,该数据包是用来通知所有服务器的,以广播形式发出,因此目标 IP 地址为 255.255.255.255

    4、DHCP ACK 数据包是 DHCP 服务器给客户端发送的确认数据包。

    e0dc8c29879d821d525fce3562efe226.png


    可以看到服务器标识地址为 10.1.1.1,所以捕获的数据包的源 IP 地址为 10.1.1.1。目标地址为提供的 IP 地址 10.1.1.254

    60759a5d4417a2ca8ea434e2487be477.png

    展开全文
  • 解析wsdl出来的某个方法,这里注解中的wsdllocation的ip地址和端口确定的,如果我要在配置文件中修改这个ip和端口号,让他们变成动态的,要怎么做?我了解到注解中的内容应该不能动态变动的,但我的ip和端口...
  • title: 【重识前端】地址栏中输入网址后发生了什么 date: 2020-10-09 10:08:31 tags: [浏览器] category: [重拾前端] cover: /image/cover/web.jpeg 前言 不说太多废话了,这个题目其实基本上现在面试的高频考点了...

    title: 【重识前端】地址栏中输入网址后发生了什么
    date: 2020-10-09 10:08:31
    tags: [浏览器]
    category: [重拾前端]
    cover: /image/cover/web.jpeg

    前言

    不说太多废话了,这个题目其实基本上是现在面试的高频考点了,现在我也想自己认认真真的捋一遍,到时候面试也可以流利的回答。

    开始

    let’s go

    URL解析

    其实有人一开始会有疑惑,至少我一开始也有疑惑,不是应该先DNS解析吗?

    其实不是的,现在的浏览器他会优先解析你是不是一个合法的URL,为什么呢?比如我们在Chrome输入中文“Derrick是帅哥吗”,这样的不是一个正常的合法的URL,就会优先调用你默认的搜索引擎开始搜索。

    当然了,合法的URL包括了协议和网络地址,最常用的协议是

    • HTTP(超文本传输协议)
    • FTP(文件传输协议)

    网络地址也可以是ip地址,以及端口号,没有端口默认是80端口

    DNS域名解析

    这一步其实简单来说就是"baidu.com"这个域名,解析成一个整个的地址。

    比如我们的家庭住址都有一个门牌号,xx小区xx栋xx号

    这样的一串标识符就可以精准的找到我们的家庭住址,而每一个ip地址就是这样的一个门牌号,比如baidu.com这个不是一个门牌号,这个可以理解为百度的家,你告诉浏览器你要去百度的家,这个时候就会开始进行DNS解析他会解析成百度的门牌号,然后找到百度的家。

    缓存

    这里面又会涉及到缓存的概念,什么意思呢?

    就是之前我查过百度的家了,已经记录下来百度的家的门牌号了,就不需要重新的进行解析了,直接读取就好了,节约时间。

    这里面涉及的知识太多了,不在这次的讨论范围内。所以只简单的说一下。

    在这里插入图片描述

    上图其实很好的解答了DNS的整个解析过程。

    1. 从浏览器获取缓存结果。
    2. 如果浏览器没有缓存就从本地系统的缓存中读取,比如host文件等等,像我们平常上GitHub如果慢的话我们都会修改host文件,给他配一个快一点的ip之类的等等。
    3. 然后是图里面没有提到的路由器缓存,一般的路由器也会有自己的缓存。
    4. 路由器也找不到只能开始解析了。本地域名服务器会向根域名服务器发送一个请求, 如果根域名服务器也不存在该域名时, 本地域名会向com顶级域名服务器发送一个请求, 依次类推下去。 直到最后找到目标网址所对应的 IP, 并将其缓存到本地, 以供下次使用。

    DNS重定向

    这里顺便说一下DNS的重定向吧

    DNS每次返回的ip地址可能会不一样,因为世界上不是只有一个机器可以处理"baidu.com"的这个请求,有很多机器可以处理,DNS只需要返回可以处理的机器的ip地址就可以了。例如可以根据每台机器的负载量, 该机器离用户地理位置的距离等等, 这种过程就是DNS负载均衡, 又叫做DNS重定向。

    很简单,几个例子,比如我在故宫的北门,打开地图要查询故宫肯定会让我从北门进去。而如果我在故宫的南门,要导航到故宫就会让我从南门进去。

    DNS污染

    DNS 污染(DNS cache pollution), 又称域名服务器缓存投毒(DNS cache poisoning), 是指一些刻意制造或无意中制造出来的域名服务器数据包, 把域名指往不正确的IP地址

    某些网络运营商为了某些目的, 对DNS进行了某些操作, 导致上网的用户无法通过域名取得正确的IP地址。 某些国家或地区出于某些目的为了防止某网站被访问, 而且其又掌握部分国际DNS根目录服务器或镜像, 也会利用此方法进行屏蔽。 (Google、 Facebook等)

    至于如果防止DNS污染, 这里只说一个方法就是修改hosts文件, 其他的自行搜索吧。

    TCP建立连接

    其实我们解析之后,找到真正的服务器,我们就需要获取他的资源,最简单的就是获取他的HTML文件,来渲染对吧?怎么获取呢,我们需要TCP连接来获取。

    这里涉及到三次握手,和四次挥手以及UDP的一些细一点的知识点。

    说TCP之前我想把一些里面可能用到的东西先说说清楚,方便查找。

    位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

    三次握手

    在这里插入图片描述

    三次握手基本上就是👆的图片了,里面的位码在之前也有解释。

    这里重点说一下为什么是三次握手🤝,而不是两次或者四次。

    A在街上看见了隔了100米的B,(正常情况下如果面对面交流是没有问题的,但是街上很吵,各种车鸣声,店铺广告声之类的。)所以A想和B进行对话,(别问题为什么不打电话,节约钱!)

    A喊了B一声,不知道B听不听得见,所以只能在远处等B的回应。

    B听见了,也回应了A,但是他不知道A能不能听见所以也要等A回应。

    然后A给出了回应,之后A和B就快乐的交流起来。

    ok,我们再概括一下。

    对应到三次握手就是A -> client;B->server

    1. 第一次🤝(A喊B)是为了确认一下B能不能听见,也就是客户端要确认服务端的接受功能正不正常
    2. 第二次🤝(B喊A)是告诉A,我能听见,现在我现在知道你能不能听见,也就是服务端告诉客户端我接受功能正常,现在我想知道你接收功能正不正常。
    3. 第三次🤝(A喊B)是为了告诉B我听见了,也就是客户端让服务端知道客户端的接收功能正常,并且可以开始传输。

    为什么要三次握手,因为只有这三次可以完美的确认双方的接收和发送功能正常。

    为什么不是两次握手?按照上面的说法,B直接开始发送数据,可是他根本不知道A能不能接收啊,发出去岂不是浪费了,对吧?万一A不能接收呢?所以只能等待A的回应

    为什么不是四次握手?因为三次就已经完成了他们互相想知道的信息不需要继续浪费资源了,赶紧开始通信吧!

    四次挥手

    四次挥手其实后面才会讲到,但是因为知识点是一起的,所以就放在一起讲了

    老规矩,看图和上面的位码意思,就不多解释了。

    在这里插入图片描述

    这里重点解释一下为什么是四次挥手👋

    看图我们可以很明显的看到其实就多了一次服务端告诉客户端要终止的消息。

    还是举刚刚A和B的例子吧。

    A觉得和B聊的差不多了,想结束对话,因为天色很晚了要回家吃饭🍚了。

    所以A告诉B,我想走了,不想聊了。

    B收到后告诉A,好的,我知道了,但是你等我一下,我撒泡尿,撒完一起走。

    B撒完尿之后,告诉A我撒完尿了。

    A收到两句话(1.B听到👂A想回家的消息,2.B撒完尿之后的一句话)后,告诉B,我走了。

    B听到后也回家了。

    ok,我们再概括一下。

    对应到三次握手就是A -> client;B->server

    1. 第一次👋 A告诉B我想回家吃饭了。也就是客户端告诉服务端,想断开连接了。
    2. 第二次👋B告诉A我收到你的消息了,不过我尿拉完就一起回家吧。也就是服务端告诉客户端我收到你的消息了,但是我这里还有一个文件没有传输完,搞定了就关闭链接。
    3. 第三次👋B告诉A我撒完尿了。也就是服务端告诉客户端我文件传输完了,可以关闭链接了。
    4. 第四次👋A告诉B你的两句话都听到了(1.B听到了A想回家的消息,2.B撒完尿了)。也就是客户端告诉服务端我关闭链接了,你也别发了。

    双方结束链接。

    相比于三次握手,多出来的那一次回收就是服务端需要有一个关闭传输的这么一个过程,这个过程可能需要时间,所以客户端需要等待传输。

    UDP

    这里虽然不在范围内,但是我想讲都讲了,顺便吧UDP一起说吧!

    UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

    它有以下几个特点:

    1.面向无连接

    首先 UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。

    具体来说就是:

    • 在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了
    • 在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作

    2.有单播,多播,广播的功能

    UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

    3.UDP是面向报文的

    发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文

    4.不可靠性

    首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。

    并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。

    再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。

    UDP只想把数据发出去,具体有没有成功他不关心

    5.头部开销小,传输数据报文时是很高效的。

    UDP 头部包含了以下几个数据:

    • 两个十六位的端口号,分别为源端口(可选字段)和目标端口
    • 整个数据报文的长度
    • 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误

    因此 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的

    6.总结

    UDP TCP
    是否连接 无连接 面向连接
    是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
    连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信
    传输方式 面向报文 面向字节流
    首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
    适用场景 适用于实时应用(IP电话、视频会议、直播等) 适用于要求可靠传输的应用,例如文件传输

    SSL/TLS加密

    在HTTP请求之前,如果有加密的(就是HTTPS),需要先确认一下双方是否是自己想要找的那个人。

    怎么知道那个他是不是自己要找的人呢?有两种方法:对称加密和非对称加密

    对称加密

    对称加密其实就是A和B都有一个解密的规则,双方都心知肚明。这样就可以解密。

    对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。

    非对称加密

    那么什么是非对称加密呢?

    非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人–银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。

    总结

    所以基本上都是先用非对称加密传输对称加密的秘钥。

    HTTP请求

    HTTP请求得到资源文件,如果有gzip压缩的话还需要解压,然后是一些HTTP小的零碎知识点。

    HTTP报文

    HTTP 报文是由 请求报文+响应报文 共同组成

    • 请求报文:
      • 定义:所有经过传输协议,客户端传递给服务器的内容,都被成为请求报文
      • 包含:
        • 起始行
        • 请求头(请求首部)
        • 请求主体
    • 响应报文:
      • 定义:所有经过传输协议,服务器返回给客户端的内容,都被成为响应报文
      • 包含:
        • HTTP状态码
        • 响应头
        • 响应主体

    HTTP状态码

    1~5开头,三位数字

    • 1 开头的代表处理中,一般见不到
    • 2开头:都是成功
      • 200:OK:成功
      • 201:CREATED:一般应用于告诉服务器创建一个新文件,最后服务器创建成功后返回的状态码
      • 204:NO CONTENT:对于某些请求(例如:PUT或者DELETE),服务器不想处理,可以返回空内容,并且用204状态码告知
    • 3开头:代表成功,只不过中间需要中转一下
      • 301:Moved Permanently:永久重定向(永久转移)
      • 302:Moved Temporarily:临时转移,很早以前基本上用302来做,但是现在主要用307来处理这个事情,
      • 307的意思就是临时重定向Temporary Redirect =>主要用于:服务器的负载均衡等
      • 304:Not Modified:设置HTTP的协商缓存
    • 4开头:都是失败
      • 400:Bad Request:传递给服务器的参数错误
      • 401:Unauthorized:无权限访问
      • 404:Not Found:请求地址错误
    • 5开头:都是失败
      • 500:Internal Server Error:未知服务器错误
      • 503:Service Unavailable:服务器超负荷

    HTTP请求方式

    其实正常会说到什么POST, GET之类的,但是我这里想说一下cors里面的东西。

    还是本着既然学到这里顺路搞搞清楚

    浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

    简单请求

    只要同时满足以下两大条件,就属于简单请求。

    (1) 请求方法是以下三种方法之一:

    • HEAD
    • GET
    • POST

    (2)HTTP的头信息不超出以下几种字段:

    • Accept
    • Accept-Language
    • Content-Language
    • Last-Event-ID
    • Content-Type:只限于三个值application/x-www-form-urlencodedmultipart/form-datatext/plain

    非简单请求

    凡是不同时满足上面两个条件,就属于非简单请求。

    非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUTDELETE,或者Content-Type字段的类型是application/json

    非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。

    浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。

    也就是我们常说的跨域,这个问题可以交由后端的同学设置白名单或者运维的同学设置。

    如果是前端的同学做这种跨域的问题的话不太方便

    比如

    • JSONP

    • document.domain + iframe跨域

    • location.hash + iframe跨域

    • window.name + iframe跨域

    • postMessage跨域

    但是基本上我们常用的就是JSONP

    具体这些方法和场景有机会的话具体说一下。

    断开TCP连接

    也就是之前的四次挥手,可以看一下上面的说的四次挥手

    浏览器渲染页面

    文件解码成功后会正式开始渲染流程,先会根据 HTML 构建 DOM 树,有 CSS 的话会去构建 CSSOM 树。如果遇到 script 标签的话,会判断是否存在 async 或者 defer ,前者会并行进行下载并执行 JS,后者会先下载文件,然后等待 HTML 解析完成后顺序执行。

    如果以上都没有,就会阻塞住渲染流程直到 JS 执行完毕。遇到文件下载的会去下载文件,这里如果使用 HTTP/2 协议的话会极大的提高多图的下载效率。

    CSSOM 树和 DOM 树构建完成后会开始生成 Render 树,这一步就是确定页面元素的布局、样式等等诸多方面的东西

    在生成 Render 树的过程中,浏览器就开始调用 GPU 绘制,合成图层,将内容显示在屏幕上了。

    总结

    1. URL解析
    2. DNS解析
    3. 建立连接
    4. 如果有加密的话要先解密
    5. 然后http请求获取资源
    6. 断开连接
    7. 得到资源之后如果有gzip压缩要先解压
    8. 然后先构建DOM树,CSS树。下载JS文件,然后下载图片。然后生成Render树,最后确定布局,GPU绘制。

    索引

    https://www.ruanyifeng.com/blog/2016/04/cors.html

    前端面试之道(掘金小册

    https://juejin.im/post/6844904162166063118#heading-30

    展开全文
  • 文章目录当用户在地址栏输入URL点击回车后发生了什么?...览器收到URL后,先去本地host文件中查找是否有对应的域名IP关系,如果有即向IP地址发起请求;如果没有,将到DNS服务器中查找。 浏览器就会发起一个DN


    当用户在地址栏输入URL点击回车后发生了什么?

    1. 用户输入URL地址

    2. 对URL地址进行DNS域名解析

      1. 览器收到URL后,先去本地host文件中查找是否有对应的域名IP关系,如果有即向IP地址发起请求;如果没有,将到DNS服务器中查找。

        • 浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器(一般是电信运营商提供的,也可以使用像Google提供的DNS服务器)发起域名解析请求。还没有查找到就会进行轮询。
        • 先是会找根域的DNS的IP地址(这个DNS服务器都内置13台根域的DNS的IP地址),找打根域的DNS地址,就会向其发起请求。
        • 根域发现这是一个顶级域com域的一个域名,于是就告诉运营商的DNS我不知道这个域名的IP地址,但是我知道com域的IP地址,你去找它去,于是运营商的DNS就得到了com域的IP地址,又向com域的IP地址发起了请求。
        • 是就把找到的结果发送给运营商的DNS服务器,这个时候运营商的DNS服务器就拿到了www.linux178.com这个域名对应的IP地址,并返回给Windows系统内核,内核又把结果返回给浏览器,终于浏览器拿到了www.linux178.com对应的IP地址,该进行一步的动作了
      2. DNS分为本地DNS服务器,根DNS服务器和各个子DNS服务器。

      3. DNS查询过程:

        1. 查看浏览器内部缓存

        检测域名是否存在于浏览器缓存中,如果有缓存直接使用,没有则下一步。打开 chrome://net-internals/#dns 即可查看本机浏览器的 dns 缓存。

        1. 系统缓存

        浏览器会调用一个类似 gethostbyname 的库函数,此函数会先去检测本地 hosts 文件,查看是否有对应 ip。

        PS: 这里有一个点,localhost 默认 ip 是 172.0.0.1,这是一个回路段,也叫换回接口。也就是不会发往服务器,是直接在本地打开的。

        1. 路由器缓存、ISP 缓存

        如果浏览器和系统缓存都没有,系统的 gethostname 函数就会像 DNS 服务器发送请求。而网络服务一般都会先经过路由器以及网络服务商(电信),所以会先查询路由器缓存,然后再查询 ISP 的 DNS 缓存。

        1. 本地 DNS 服务器

        通常为自己计算机搭建的小型 DNS 服务器,自我使用,属于 DNS 优化的一部分。

        1. 域名服务器
    3. 建立TCP连接(三次握手)

      1. 客户端发送连接请求报文段,将SYN位置为1,Seq为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
      2. 服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置ACK为x+1;同时,自己自己还要发送SYN请求信息,将SYN位置为1,Seq为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
      3. 客户端收到服务器的SYN+ACK报文段。然后将ACK设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

    • 为什么是三次握手而不是两次,四次呢?

      1. 为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
      2. “已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”
    1. 浏览器发送HTTP请求报文

    2. 服务器返回HTTP响应报文

    3. 关闭TCP连接(四次挥手)

      1. 主机1(可以使客户端,也可以是服务器端),设置Seq和Ack,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
      2. 机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Ack为Seq加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;
      3. 主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;
      4. 主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
      5. img
      6. 为什么需要四次挥手,而不是三次?
        1. 关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。。
    4. 浏览器解析文档资源并渲染页面

    AJAX:

    • 概述:AJAX用户端可以向服务器端悄悄的发起上行请求,服务器端悄悄的做出相应的下行响应。在页面没有重新加载情况下实现页面局部更新。
    • Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发送异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。

    JQuery使用AJAX:

    • //给按钮绑定单击事件
       $("button:eq(0)").click(function () {
           //向服务器端悄悄发起上行请求----GET,拉去服务器数据
           //第一个参数向向服务器端请求path
           //第二个参数:客户端向服务器端额外传递一些数据(可有可无)
           //第三个参数:当服务器响应数据成功的时候会立即执行一次
           $.get("./data.txt", {
               "name": "小明",
               'ps': 123
           }, function (data) {
               //data:就是服务器端响应数据
               //修改H1标题
               $("h1").html(data);
           });
       });
       //第二个按钮发起POST请求
       $("button:eq(1)").click(function () {
           //向服务器端去悄悄的发起上行请求----POST,拉去服务器数据
           $.post("./data.txt", function (data) {
               //在页面没有重新加载情况下实现页面局部跟新
               $("h1").html(data);
           });
          
       });
          
       //第三个按钮单击事件
       $("button:eq(2)").click(function () {
           //向服务器端发起POST请求
           //当前这个方法可以发起GET、POST,请求参数配置务必是一个JSON数据格式
           $.ajax({
               // 请求网址
               "url": "./data.txt",
               //请求方式
               "type": "post",
               //给服务器额外传递数据
               "data": {
                   "a": 1
               },
               //回调函数:可以接受服务器数据
               "success": function (data) {
                   //当服务器响应成功的时候会立即执行一次
                   $("h1").html(data);
          
               }
          
           });
          
       });
      

    原生AJAX技术

    • <body>
          <h1>我是默认文本</h1>
          <button>单击我悄悄发起上行请求----GET</button>
      </body>
      
      </html>
      <script>
          //获取标签
          var h1 = document.querySelector("h1");
          var btn = document.querySelector("button");
          //单击按钮发起上行请求
          btn.onclick = function () {
              //悄悄发起上行请求
              if (window.XMLHttpRequest) {
                  //高级浏览器写法
                  var xhr = new XMLHttpRequest();
              } else {
                  //IE低版本写法
                  var xhr = new ActiveXObject("msxml2.0xmlhttp");
              }
              //设置请求方式
              xhr.open("get", "./data.txt", true);
              //发送请求
              xhr.send();
              //监听就绪状态
              xhr.onreadystatechange = function () {
                  if (xhr.status == 200 && xhr.readyState == 4) {
                      //在页面没有重新加载情况下实现页面局部跟新
                      h1.innerHTML = xhr.responseText;
                  }
              }
      
          }
      </script>
      

    状态码

    • 200 请求成功

      404 请求失败

      500 服务器端错误

      301是永久重定向,而302是临时重定向**

    GETPOST区别

    相同地方:GET、POST都属于上行请求

    不同地方:

    GET POST
    相对而言不安全 相对而言安全一些
    给服务器额外传递数据是由上限的 相对而言没有上限
    便于分享 不便于分享

    AJAX技术不能跨域请求数据

    • 当用户发起多次请求的时候,如果协议|域名|端口号不同情况下,

      称之为跨域。

    第一次请求 第二次请求 是否跨域
    http://www.baidu.com http://www.sina.com 跨域(域名不同)
    http://www.baidu.com:80 http://www.baidu.com:8080 跨域(因为端号不同)
    http://127.0.0.1/index.html http://127.0.0.1/01.php 没有跨域
    http://127.0.0.1 http:127.0.0.2 跨域(域名不同)

    JSONP可以跨域请求数据

    • JSONP数据格式跨域so easy:实现原理是如下:

      • 利用script标签src属性(本身就可以跨域请求数据)
      • 利用的是将一个函数执行部分放置另外一个服务器上面
    • 跨域拉去京东数据

      <body>
          <select></select>
      </body>
      
      </html>
      <script>
          //获取下拉框
          var select = document.querySelector("select");
          //声明一个同名函数
          function jQuery4494404(arr) {
              //遍历数组
              for (var i = 0; i < arr.length; i++) {
                  //创建节点
                  var op = document.createElement("option");
                  op.innerHTML = arr[i].name;
                  select.appendChild(op);
              }
          }
      </script>
      <!-- 将京东服务器调用部分引入 -->
      <script src="https://fts.jd.com/area/get?fid=72&callback=jQuery4494404&_=1578732186910"></script>
      
    展开全文
  • 客户端http请求 会带ip

    千次阅读 2016-09-16 14:16:58
    转:http://zhidao.baidu.com/link?url=dT-TQEoc95dOUi2wdBTMl_40mRHDkG_-mS2SlPGim2mt9WiClW_q23Tb3dVwPDuaLY8WAlF8Q5efscABoNVjPaKJLdrtEFPSWqdnQw6vD07 ...IP地址在网络层会传输,服务器读取的底层传来的I
  • 1.输入url地址后,首先进行DNS解析,将相应的域名解析为IP地址; 2.客户端根据IP地址去寻找相应的服务器; 3.与服务器进行TCP的三次握手;  所谓三次握手就是客户端在请求与服务器相连接时,彼此共计发送了三次...
  • 你知道当我们在网页浏览器(Web browser)的地址栏中输入 URL时,Web 页面如何呈现的吗? 首先你知道DNS吗? DNS(Domain Name System)服务和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析...
  • 基本的 URL 包含 模式(或称协议)、服务器名称(或 IP 地址)、路径和文件名;如 “ 协议:// 授权 / 路径 ? 查询 ” 完整的、带授权部分的普通统一资源标识符语法看上去如下:协议:// 用户名: 密码@子域名.域名....
  • 今天想到[url]... 在这个IP被阻止界面中提示我所用来访问这个网站的IP地址段已经被禁止,原因我所用的IP地址段存在恶意的脚本小子***行为。  一直以来,我对能够检测WEB用户IP地址的网站...
  • </li><li>如果ip对应的右边的地址,那我用ping ws.acgvideo.com获得的ip替换m10.music.126.net,是不是访问的其实前者?也就说资源其实靠后面的路径区分的,前面的域名后缀都共享的...
  • ip的查找方法

    2007-12-20 15:19:36
    这个ip大家都知道的32位组成的吗? 首先:第一种用ping命令拉比如要查[url]...第二种就是用netstat-a这个命令拉操作方式如上拉,不过在运行输入这个命令就可以查看当前与本地机建立连接的IP地址拉,此命令可以加一...
  • java开发公众号接口时,url地址为http://10.20.21.237/WechatDemo/wechat.do。 做的路由器映射,地址是可以通过互联网访问的。为什么还是验证失败呢?...用ip映射的 url 不可用吗????求大神指点
  • post_url无法访问

    2020-12-07 10:17:00
    [2020-03-25 13:45:07.846] [W] [HTTP] HTTP 上报地址 http://公网ip:8080 无法访问 </code></pre> 环境 云服务器(华为云) Ubuntu 18.04 LTS 求大佬解救,本人挺小白的,不知道这样的...
  • 我想把ip地址和端口存到常量中,在properties文件...我的意思我想把ip地址抽出来,存到一个ip变量中 然后直接引用ip就行了 属性文件应该不能这么做吧 除非在Java文件中设置ip 然后属性文件引用java的ip变量
  • 输入地址(使用,分割下载多个): http://exhentai.org/g/575764/ef97e9a56c/ 设置线程数量(默认5个): 2 是否尝试下载原图? y/n(默认): n 从第几页开始下载? (默认从头): 输入中转站url, 形如...
  • 2019.03.24 我今天想在终端使用svn客户端下载代码,结果不成功。...我发现虚拟机的IP地址已经变了,怎么办呢?用这个命令重新签出吗: cd /home/ubt/temp_file1 ; svn checkout https://192.168.1.60/svn/...
  • 而 tcp 则通过 ip 地址去识别访问的。DNS 解析就是域名转化成 ip 地址的过程。 <h3>DNS 查询过程 域名通过 DNS 转化成 ip 地址的过程。 <h4>1. 查看浏览器内部缓存 检测域名是否存在于浏览器缓存中,如果有...
  • 2、什么是ip? 电脑地址。表现形式 xxx.xxx.xxx.xxx x取值范围0-255 3、什么是域名? 由于ip的数字不好记忆,用字符代替数字方式,称之为叫做域名。域名解析系统(dns)进行域名解析才可以使域名和ip关联起来。 4、...
  • 比如输入的url是www.baidu.com,首先在本地域名服务器中寻找ip地址,如果没找到,本地域名服务器会请求根域名服务器寻找,如果还是没找到,本地域名服务器会请求com顶级域名服务器,如果还找不到,那么本地域名...
  • 在前端开发过程中,将常出现...浏览器并不会去尝试判断相同的ip地址对应着两个域或者两个域是否在同一个ip上。URL的头部指window.location.protocol +window.location.host,也可以理解为“Domains, protocols and...
  • 好文推荐作者:张炳https://segmentfault.com/a/1190000019897234#articleHeader19从输入URL加载起看方向从输入 URL...IP 地址回来接下来 TCP 握手,应用层会下发数据给传输层,这里 TCP 协议会指明两端的端口号,...
  • 学习 Pyt hon,大概 每个人 都从 ...找出 域名 对应 的IP地址 。 将请求 发送到 IP 对应 的服务器 。 伺服器 回应 要求 ,返回 网页内容 。 浏览者 分析 网页内容 。 因此 ,研究 爬行动物 需要 掌握 哪些 库呢? .

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

url是ip地址吗