IP间的通信依赖MAC地址 ,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和 网络设备中转 才能连接到对方。进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。
ARP :解析地址协议,根据通信方的IP地址就可以反查出对应的MAC地址。
MAC地址: 用于在网络中唯一标示一个网卡 。一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。也叫硬件地址或者物理地址。
网卡的物理地址通常是由 网卡生产厂家烧入 网卡的EPROM。
也就是说,在网络底层的物理传输过程中, 是通过物理地址来识别主机的 ,它一定是全球唯一的。
DNS服务是位于 应用层 的协议。它提供域名到IP地址之间的解析服务。
案例:网络正常,QQ可以正常登录、游戏也可以正常玩,但是网页无论如何都打不开。这就是电脑网络设置的DNS服务器有问题,不是其故障就是不工作了。
我们配置dns一般使用大互联网公司的公共DNS服务器的ip地址,如google、百度、阿里等,这些服务器解析全面而且快捷
ipv4是用32位0/1序列来表示的,而ipv6使用128位0/1序列来表示的。
TCP在connect的时候必须要知道对方的 IP地址 和 监听端口 ,
同一个IP可以设置多个不同站点, 如果访问不同的域名都转发到同一IP,怎么区分这些不同的站点呢 , 就是用的Host字段 ,如果服务器后台解析出Host但是服务器上找不到相应的站点,那么这个连接很可能会被丢弃,从而报错。
虚拟主机的原理是通过HTTP请求头中的Host是否匹配server_name来实现的。
待补充:
GET POST
400 等错误
http报文头部包含了请求方法,请求的资源等信息,但是对于Host字段一直觉得可有可无,因为我所认为的Host的字段的作用在于指明http报文的方向,访问的地点,但是实际报文转发都是由底层目的端口IP决定了,所以觉得Host字段没有用。
问题在于当我写的一个socket代理上,我的目的是把所有请求的报文全部重定向到一个固定的IP和端口上,想法很简单,接收请求,新建socket,连接到固定IP和端口,转发请求。结果报错:
这个错误一般出在C/S模式中一方数据还在等待,一方却关闭了连接。我把重定向取消,即连接到原先请求想要请求的网址,程序正常运行。那么问题出在哪?
前面讲了,就是http请求头的问题,http请求头第一行指明请求资源,若是没有该资源,会返回一个错误页面,但是起码是有返回信息的。但是如果Host这个字段错误,服务端就会丢弃这个连接,而客户端还在等待接收,这样就会报错。那么Host字段的作用是什么。
我们知道,不同的域名通过A记录或者CNAME方式可以连接都同一个IP下,同一个IP也可以设置多个不同站点,那我访问不同的域名都转发到同一IP,怎么区分这些不同的站点呢,就是用的Host字段,如果服务器后台解析出Host但是服务器上找不到相应的站点,那么这个连接很可能会被丢弃,从而报错。
我在程序当中将Host修改成
再将请求的资源路径修改成“/”,socket定向到百度的IP,访问成功百度首页,且不会报错。
小错误,却花了点时间解决,mark一下。
网络---一篇文章详解请求头Host的概念
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)