简单谈谈计算机网络

  如果你想在你的主机上发送一个DNS查询报文,那么就使用 nslookup 程序吧,它可以帮助你完成,前俩行是你的主机的DNS服务器的名字,以及ip地址。

  ## 运行cmd

  C:\> nslookup baidu.com

  服务器: cache3-dlcity

  Address: 202.96.69.38

  非权威应答:

  名称: baidu.com

  Addresses:180.149.132.47

  123.125.114.144

  220.181.57.217

  111.13.101.208

  三、运输层

  运输层协议为运行在不同的主机上的应用进程之间提供了逻辑通信,不需要考虑下层的实现细节,即使是相隔很远,也可以通过运用运输层的接口彼此发送报文。所以运输层协议是在端系统上而不是在路由器上。我们通过应用层,都知道,俩个主机之间通信就是俩个进程在通信。但是我们的电脑经常运行着很多的软件,QQ、网易云音乐、chrome.......那么怎么保证它们正常接收到自己的数据包呢?这里就要提出一个叫做端口的东西。 端口 ,是一个16比特的数,其大小在0-65535之间,但是0-1023范围的端口称为公认端口,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯,FTP一般使用端口(20,21),53为DNS服务的端口等等。

  多路复用/分解:一个进程可以有一个或者多个套接字,就像FTP,但是一般一个套接字值绑定只一个端口号,那么在同一个时刻,一定存在着多个套接字,所以每个套接字都有自己唯一的标识符。用来区别于其他套接字。这样运输层就可以把不同的报文数据交付到正确的套接字上面,称为 多路分解 。而不同的套接字加上各种的壳,从而生成报文段,然后将报文段传递到网络层,称为 多路复用 。

  3x01.UDP

  为了说清楚UDP(User Datagram Protocol)协议,我想有必要简单的说明一下网络层的 IP 协议。 IP 协议的服务模型为尽力而为交付服务,这就意味着IP尽它“最大的努力”在通信的主机之间交付报文,但它不会做任何的保证。不保证报文段的交付,不保证报文段的按序交付,不保证报文段中数据的完整性。所以 IP 协议也被称为是 不可靠服务 。

  就像 IP 协议是不可靠协议一般, UDP 也是如此。但是尽管如此,有一些场合,还是很适合 UDP 的,比如交谈式音频/视频,这些应用能够承受一定程度的数据损失,因为那丢失的数据对于播放出现的干扰,并不是很致命。如果说应用程序开发人员在开发时选择了 UDP ,那么这个应用差不多就是直接与 IP 协议打交道了。我知道,你想说,既然UDP这么不好,为什么编程有时还选择这个。那是因为UDP在传输的速度上要很大的优于TCP协议。TCP提供很多的保障,但是保障的背后就是时间的代价。就像在相同算法下,C语言与其他高级语言运行时间明显有差别。

物联网

  UDP报文段结构

  上图为UDP报文段结构,我们可以看出,相比较上层(应用层)传来的报文,多了四个字节,分别为,源端口号,目的端口号,长度(报文),校验和。通过后俩个传输数据,确定是否在移动中,其中的比特发生了改变。比如链路中的噪音干扰,或者存储在路由器时引入问题。有人可能会说怎么这个报文段里面没有对方或者自己的IP地址,那时因为IP地址是在下一层包装进去的。

  3x02.TCP

  tcp(Transmission Control Protocol)协议相比叫UDP协议,最为重要的就是比UDP多了俩项功能。

  可靠传输。保证数据正确、按序到达。虽然UDP不能保证,但是可以在上层应用程序里建立自己的可靠机制来完成。

  拥堵控制。由于UDP没有限制发送报文段,所以导致UDP发送方和接受方之间的高丢包率,并挤跨了TCP的会话。

物联网

  TCP报文段结构

  三次握手:

  在报文段的首部中的一个标志位 SYN 被置为1,所以,有时也称其为SYN报文段,另外,客户会随机的选择一个初始序号(client_isn)并放到序号(Sequence number) 。然后发送给服务器。

  服务器会从该数据报中提取 SYN 报文段,并且为TCP连接分配TCP缓存和变量,并向该TCP发送允许连接的报文段。其具体为:首先, SYN 置为1;其次,首部的确认字段(Acknowledgment number)被置为(client_isn + 1),最后会选择自己的初始序号(server_isn)放到序号(Sequence number) 。然后发送给客户机。有时也称这个报文段为 SYN报文段(SYNACK segment) 。