DNS 与 TCP
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS 与 TCP相关的知识,希望对你有一定的参考价值。
参考技术A DNS:域名系统简单来说就是你给它一个域名,他给你返回一个 ip
当我们输入一个域名(baidu.com)的时候,首先浏览器会看自己的缓存,浏览器如果之前访问过baidu.com,它就会把上次的 baidu.com 的 ip 给你,如果没有,它就会去问操作系统,操作系统如果发现有缓存,就直接用,没有就去问 ISP(运营商);我们平时设置的 hosts 文件就是手动给操作系统添加一个缓存,每次我们访问对应的域名它就不会去问 ISP,直接通过 hosts 里的设置去访问对应的 ip
上面浏览器拿到对应域名的 ip 就会往这个 ip 里去开始建立一个 TCP 连接
TCP:Transmission Control Protocol 传输控制协议
浏览器先发一个 SYN(x)给服务器,服务器就返回一个 ACK(x+1),同时发送一个 SYN(y) 给浏览器,浏览器接收到回复给服务器一个 ACK(y+1),这里x和y一般都是从0开始的
(注:SYN 是 synchronize(同步)的缩写,同步不是"同步异步“中的同步,而是”同步信息“中的同步;ACK 是 acknowledge(获悉/知道)的缩写
拓展问题:为什么一定需要第三次?
答:为了防止一些错误的情况,如果在第二次的时候服务器回应了浏览器,并且发送了一个SYN(y)给浏览器,而浏览器啥也不回应,那么服务器就会任务和浏览器没有办法有效通信,服务器就会抛出异常
三次握手成功后就可以建立 TCP 连接,开始发送 http 内容
上面截图中右边以打电话为例,A跟B说我说完了,B说哦,然后B又说了一句:但我还有一句:我爱你;紧接着又说了一句我也说完了,A说哦;这上面一共是五句话,但是第三句是可以省略的,所以就是四句,换成左边的就是A 跟 B说了句 FIN(x),B 跟A说ACK(x+1)(我知道了(x+1)),B 紧接着又说了句FIN(y)(完成了y),A说ACK(y+1),关闭结束
拓展问题:四次挥手为什么中间两次不能合并?不都是B对A说的吗?
答:因为它中间还可能夹杂着其他的话
UDP(User Data Protocol,用户数据报协议)
UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。
1). TCP 面向连接有状态,UDP 无状态
2). TCP 可靠(不丢失不重复),UDP 不可靠
3). TCP 传输效率较低,UDP 较高
dns可以使用tcp与udp两种协议,分别在啥情况下使用
dns可以使用tcp与udp两种协议,分别在什么情况下使用
现在就来说说DNS分别在什么情况下使用这两种协议。
如果用wireshark、sniffer或古老些的tcpdump抓包分析,会发现几乎所有的情况都是在使用UDP,使用TCP的情况非常罕见,神秘兮兮。其实当解析器发出一个request后,返回的response中的tc删节标志比特位被置1时,说明反馈报文因为超长而有删节。这是因为UDP的报文最大长度为512字节。解析器发现后,将使用TCP重发request,TCP允许报文长度超过512字节。既然TCP能将data stream分成多个segment,它就能用更多的segment来传送任意长度的数据。
2. 另外一种情况是,当一个域的辅助域名服务器启动时,将从该域的主域名服务器primary DNS server执行区域传送。除此之外,辅域名服务器也会定时(一般时3小时)向PDS进行查询以便了解SOA的数据是否有变动。如有变动,也会执行一次区域传送。区域传送将使用TCP而不是UDP,因为传送的数据量比一个request或response多得多。
DNS主要还是使用UDP,解析器还是服务端都必须自己处理重传和超时。DNS往往需要跨越广域网或互联网,分组丢失率和往返时间的不确定性要更大些,这对于DNS客户端来说是个考验,好的重传和超时检测就显得更重要了。
参考技术A DNS一般情况下使用UDP通讯,但有两种情况例外:1、当客户端发出DNS查询请求,从服务器收到的响应报文中的TC(删减标志)比特被置为1时,此时意味着服务器响应长度超过512字节,而仅返回前512字节(udp报文最长为512B 而tcp无此限制)。在遇到这种情况时,客户端会使用TCP重发起原来的DNS查询请求,它将运行返回的响应超过512字节。
2、DNS的主辅名字服务器在同步时使用TCP协议。辅名字服务器一般每3小时向主名字服务器发起查询,看主服务器是否有新的记录变动,如有变动,将执行一次区域传送,区域传送使用TCP协议。 参考技术B tcp/udp是两种连接方式
跟DNS没关系
tcp是基于安全的连接,比如说网页
udp是基于快速的连接,比如游戏,
具体资料你可以去网上搜
学问很深
估计看一个月都看不完 参考技术C 可靠传输基于TCP
不可靠传输基于UDP
以上是关于DNS 与 TCP的主要内容,如果未能解决你的问题,请参考以下文章