专栏名称: 程序员之家
程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!
目录
相关文章推荐
玉伯  ·  企业家要 ego ... ·  11 小时前  
京东科技技术说  ·  JDK从8升级到21的问题集 ·  2 天前  
阿里技术  ·  Cursor入门:MCP开发调用和项目实战 ·  4 天前  
51好读  ›  专栏  ›  程序员之家

花点时间聊聊关于计算机网络的事

程序员之家  · 公众号  · 程序员  · 2017-05-01 21:59

正文

请到「今天看啥」查看全文



对于应用层,我想绝大多数人,应该是最熟悉的了。尤其是从事软件开发的人。这类应用程序体系结构是由应用程序研发者设计,不过多是利用的现代所流行的俩种主流体系结构之一:C/S结构(客户 - 服务器),P2P结构(对等体系)。

  • C/S结构:在这种体系中,总有一个需要一直打开的主机,我们称为服务器(server),它服务于其他称为客户(client)主机的请求。服务器总是具有一个固定的地址,大家都知道的地址,称为IP地址。比如baidu.com的IP地址之一为180.149.132.47。啥?你不知道baidu.com的地址,但是你知道baidu.com这个名字吧,又因为存在DNS服务(后面说),所以想当于了解。在这种结构下,值得注意的是,其他客户主机之间是不可以之间进行通信的。

  • P2P结构:在对等(Peer-to-peer)体系中,每台计算机之间都处于对等的地位,各台计算机有相同的功能,无主从之分,一台计算机既可作为服务器,设定共享资源供网络中其他计算机所使用,又可以作为工作站。网络中的每一台计算机既能充当网络服务的请求者,又对其它计算机的请求做出响应,提供资源、服务和内容。通常这些资源和服务包括:信息的共享和交换、计算资源(如CPU计算能力共享)、存储共享(如缓存和磁盘空间的使用)、网络共享、打印机共享等。


2x01.是什么在通信

对于学习过操作系统,或阅读过unix网络编程的人,对Tcp echo服务器应该不会陌生。当前进程通过fork()生成另外一个进程,一个进程发送一句话,然后另外一个接收到,并且显示在屏幕上。所以,我们可以想得到,在应用层而言,忽略下层数据传输细节,那么通信的其实就是进程。然而我们不怎么关注同一台主机上进程间的通信,而关注不同端系统上的进程间的通信。那么就不得不一个新东西:套接字,主机上应用层与运输层的接口,但是应用程序开发者对于运输层的控制仅限于:

  • 选择运输层的协议

  • 也许能设定几个运输层的参数,比如最大换成数,和最大报文段长度等。


2x02.网络应用

互联网从诞生到现在不过短短百年,但是对于人类社会的影响确实翻天覆地。试想,一百年前的时候,你能身处中华,却知道美国现在发生着选举大会吗?你能通过一个东西随身携带万卷书吗?你能实时与你远在他乡的好友实时通讯吗?不能,都不能。但是现在可以。那么接下来,就介绍几个极为流行的应用以及它的应用层协议吧。


  • HTTP:Hyper Text Transfer Protocol(超文本传输协议)的缩写。常有俩个程序实现,客户机-服务器,并且分别运行在不同的端系统上。其下的支撑运输协议是使用的TCP,而且由于http服务器并不保存关于客户的任何信息,所以http也被称为是一个无状态协议。但是为了跟踪用户的输入(比如用户的购物车商品),网站会提供一个用户身份的识别码,存放在cookie中,每次再访问网站则自动将cookie加入到HTTP报文头部,实现身份的识别。


交互过程


  • FTP:File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。同时,它也是一个应用程序。通过使用俩个并行的TCP链接来传输文件,一个是控制链接,一个是数据链接,控制链接用于在俩个主机之间传输控制信息,如用户标识,口令,命令。数据链接用于实际发送一个。


  • DNS:Domain Name System(域名系统)的缩写,运行在UDP协议之上。就像我们上面提到的baidu.com怎么转换成ip地址,这个就是DNS的服务。下面来介绍一下。首先,总的来说,DNS采用了分布式的设计方案。如下。


DNS服务器层次结构


每个组织,如一个大学,一个院系,一个公司都会有一台本地DNS服务器,当一台主机想要访问baidu.com的ip地址时,会先发送她的查询请求到本地DNS服务器,里面查找是否有baidu.com的ip地址。没有的话,本地DNS服务器就把这个请求转发到根DNS服务器,然后根DNS服务器把comDNS服务器地址发送给本地DNS服务器,然后本地DNS服务器发送查询请求到comDNS服务器,完成名字与ip地址的转换。


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




三、运输层







请到「今天看啥」查看全文