文章吧手机版
网络是怎样连接的的读后感10篇
日期:2018-04-14 20:46:02 来源:文章吧 阅读:

网络是怎样连接的的读后感10篇

  《网络是怎样连接的》是一本由[日]户根勤著作人民邮电出版社出版的平装图书,本书定价:CNY 49.00,页数:336,文章吧小编精心整理的一些读者读后感希望对大家能有帮助

  《网络是怎样连接的》读后感(一):我们渣渣只适合看这种书

  记得大学里有计算机网络这门课程,我找过著名的两本的国外教材,分别从自底向上,由上到下两个角度诠释网络是如何连接的。冗长介绍接线器,光缆,吓得我粗略的一略而过,结果自然是『万花丛中过,片叶不沾身』。

  而后,我的编程生涯里,似乎也没有被网络所困扰。不懂得各种原理,似乎用框架,查查 stackoverflow,Google 挖个遍,也可以6666. 不做底层的咸鱼,怎么会需要原理呢,我学的什么编译链接,session,segment,,内存管理也不过是镜中花,水里月。

  而现在, 我几乎每天被 mentor 拍着桌子,以办公室半斤10米都能听到的声量训斥着『作为系统程序员,你怎么可以不懂 HTTP 原理/TCP 原理』,『你看看是不是 iptables 封了UDP 包,导致 dns 解析不了。算了,你也看不懂』,『你知道 NAT 会踢掉不活跃链接吧』,『你看 HTTP 协议请求就是文本,什么时候规定参数不能重复了。那些用 map 来存参数的框架,都是做不对垃圾』,『ping 发的是 icmp 包,服务器网络有没有问题跟这个有卵关系』——就算愚笨如我,也总能理解到原理的东西有多有用吧。

  自然,我立马买上了 《图解 TCP》,《网络是如何连接的》,《计算机网络》,好好研习一番。

  当他看到我在看《图解 TCP 时》,查着 stackoverflow 时,他语重心长的说『计算机网络原理是要背的,不要看那些二手知识,都是垃圾。你们现在刚毕业,就要好好把这些知识背好。我大学的时候看的是《计算机网络》,那样的书才详细』。

  我无言以对,他说的很有道理。但那只适用于他这种,几年前写的代码还能回忆起来,指着说大概在哪里哪里,各种原理了如指掌,还能反过来教导 SA 怎么做以及写代码啪啪啪不用边写边测的人。我此等渣渣,上周写的代码,让我说这个行为是怎么样的还要返回去看。更别说,原理看完是理解,过后就啥也不知道。

  要是我们去看《计算机网络》,我很怀疑,看完后,全都忘得一干二净

  《网络是如何连接》这种逻辑性的讲解各层是如何配合,以最小必要知识为主的书,才是渣渣的必备良品。这本书,除了本身讲解质量够硬,译者也不容小觑,他的译注如端口也可通过 DNS 查询,访问 ip 地址不一定适用于开了虚拟 vhost 的服务器,完善了这本书力所未岱的地方——若是他来写书的话,恐怕也没问题。

  看完后的诸君,还不赶紧去买一本,然后打赏我去再买一本电子版的?

  《网络是怎样连接的》读后感(二):网络是怎样连接的--如图

  网络是怎样连接的

  网络是怎样连接的--如图

  客户端:

  web客户端

  dns解析

  tcp/ip 数据传送

  客户端局域网

  互联网---

  服务器端:

  --互联网--

  云数据中心

  防火墙

  负载均衡(分布式架构,多台web服务器,减少每台的访问量)

  缓存服务器

  web服务器--内网访问,对外开放端口

  数据库服务器

  缓存服务器的3种方式

  《网络是怎样连接的》读后感(三):Notes

  非常不错易读的书籍工作生活中陆陆续续接触到网络相关的。如大学时候对为什么上不了网(宿舍楼层交换机,电脑配置DHCP,子网掩码等),工作后的面试,TCP/IP的连接创建握手过程,关闭过程等,CDN网络加速回源,高性能服务器开发(epoll,socket,连接复用等),NAT和内网服务暴露到互联网,甚至翻墙等等诸多方面,如果早一点读这类书籍,可能对工作生活驾轻就熟而不是just work不求甚解。但对更复杂的 SDN(软件定义网络),VxLAN,甚至容器的overlay网络,还需要其他书籍等帮助 未完待续: 网桥/二层交换机 路由器/三层交换机 VLAN VPN 专线 BGP P2P ipsec TLS/SSL 以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术

  https://book.douban.com/subject/26941639/

  比如书中第 176 页讲到的地址转换,我们完全可以在家里配置一下试试。又比如书里第 79 页讲到了用 ACK 来确认网络包,我们可以装个 Wireshark,然后抓些包来看看 ACK 究竟是什么样的。 1 浏览器生成消息 - 探索浏览器内部 2 用电信号传输 TCP/IP 数据 - 探索协议栈和网卡 3 从网线到网络设备 - 探索集线器,交换机和路由器 4 通过接入网进入互联网内部 - 探索接入网和网络运营商 5 服务器端的局域网有什么玄机 6 请求到达web服务器,响应返回浏览器 - 短短 附录 - 网络包的旅程 1 浏览器生成消息 - 探索浏览器内部 ip 地址,要根据子网掩码来区分哪些部分是网络号哪些是机器号,子网掩码为 1 的部分表示网络号,子网掩码为 0 的部分表示主机号 主机号部分的比特全部为 0 或者全部为 1 时代表两种特殊含义(整个子网和对子网上所有设备的广播) Socket 库是用于调用网络功能的程序组件集合。gethostbyname 不同操作系统有设置ip(ip地址或自动获取dhcp,子网掩码和默认网关的),也有设置dns服务器的 域名的层次结构和缓存:

  域名(服务器和邮件服务器如@后面的部分),class(IN)和记录类型( A 时,表示域名对应的是 IP 地址;当类型为 MX 时,表示域名对应的是邮件服务器 对于一个邮件地址 tone@glasscom.com,当需要知道这个地址对应的邮件服务器时、当记录类型为 MX 时,DNS 服务器会在记录中保存两种信息,分别是邮件服务器的域名和优先级 例如根据 IP 地址反查域名的 PTR 类型,查询域名相关别名的 CNAME 类型,查询 DNS 服务器 IP 地址的 NS 类型,以及查询域名属性信息的 SOA 类型等

  分配给根域 DNS 服务器的 IP 地址在全世界仅有 13 个(但背后的其实服务器的数量是很多的)根域 DNS 服务器的相关信息已经包含在 DNS 服务器程序的配置文件中了 似乎 com、jp 这些域(称为顶级域),根域的 DNS 服务器中保管着 com、jp 等的 DNS 服务器的信息。由于上级 DNS 服务器保管着所有下级 DNS 服务器的信息,所以我们可以从根域开始一路往下顺藤摸瓜找到任意一个域的 DNS 服务器。 查询域名是先问最近的dns服务器(配置的如8.8.8.8)然后查不到就问根域,根域到顶级域,在往下。 但其实各种优化缓存(不需要从最上级的根域开始查找,因为 DNS 服务器有一个缓存。DNS 服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后

  服务器一方先创建套接字,然后等待客户端向该套接字连接管道 56 。当服务器进入等待状态时,客户端就可以连接管道了。具体来说,客户端也会先创建一个套接字,然后从该套接字延伸出管道,最后管道连接到服务器端的套接字上。当双方的套接字连接起来之后,通信准备就完成了。 管道在连接时是由客户端发起的,但在断开时可以由客户端或服务器任意一方发起 。管道断开,套机字也会被消除 浏览器等应用程序并不会自己去做连接管道、放入数据这些工作,而是委托协议栈来代劳。 创建套接字, socket,协议栈会返回一个描述符(多个套接字时的区分 connect连接,调用 connect 时,需要指定描述符、服务器 IP 地址和端口号这 3 个参数I(客户端在创建套接字时,协议栈会为这个套接字随便分配一个端口号 66 。接下来,当协议栈执行连接操作时,会将这个随便分配的端口号通知给服务器 write传递消息: read:当服务器返回响应消息时,read 就会负责将接收到的响应消息存放到接收缓冲区中。由于接收缓冲区是一块位于应用程序内部的内存空间,因此当消息被存放到接收缓冲区中时,就相当于已经转交给了应用程序。 close: HTTP 协议规定,当 Web 服务器发送完响应消息之后,应该主动执行断开操作。

  对于同一台服务器来说,重复连接和断开显然是效率很低的,因此后来人们设计出了能够在一次连接中收发多个请求和响应的方法。在 HTTP 版本 1.1 中就可以使用这种方法

  2 操作系统中的网络控制软件(协议栈)和网络硬件(网卡)是如何将浏览器的消息发送给服务器的 协议栈的上半部分有两块。 上部分TCP/UDP收发数据,一般的应用程序都是使用 TCP 收发数据的,而像 DNS 查询等收发较短的控制数据的时候则使用 UDP。 下部分:用 IP 协议控制网络包packet收发操作,IP 中还包括 ICMP协议和 ARP协议。 ICMP 用于告知网络包传送过程中产生的错误以及各种控制消息,ARP 用于根据 IP 地址查询相应的以太网 MAC 地址 协议栈内部存放控制信息的内存空间如通信对象的ip端口号通信的进行状态等,来实施断开超时连接,丢失完整检查等 netstat 每一行都显示一个套接字的控制信息) socket, connect, write, read, close 保存控制信息的头部:作 TCP 头部(20个字节,收发放端口号,序号,ack号,数据偏移量(头部长度),保留,控制位,窗口,校验和,紧急指针,可选字段)、以太网/Mac头部、IP 头部。 控制位如 ACK,PSH,RST, SYN,FIN 序号:发送方告知接收方该网络包发送的数据相当于所有发送数据的第几个字节 ACK号:接收方告知发送方接收方已经收到了所有数据的第几个字节 窗口,接收方告知发送方窗口大小(即无需等待确认可一起发送的数据量) connect: 1 client 将头部中的控制位的 SYN 比特设置为 1,需要设置适当的序号和窗口大小 2 server, 从处于等待连接状态的套接字中找到与 TCP 头部中记录的端口号相同的套接字,写入相应控制信息,把套接字状态改为正在连接,返回响应,需要在 TCP 头部中设置发送方和接收方端口号以及 SYN 比特(由于某些原因接受连接,那么将不设置 SYN,而是将 RST 比特设置为 1)。此外,在返回响应时还需要将 ACK 控制位设为 1 3 Client,通过 TCP 头部的信息确认连接服务器的操作是否成功。如果 SYN 为 1 则表示连接成功,将套接字状态改为连接完毕。客户端也需要将 ACK 比特设置为 1 并发回服务器 4 当这个服务器收到这个返回包之后,连接操作才算全部完成(session/connection

  当控制流程从 connect 回到应用程序之后,接下来就进入数据收发阶段了。数据收发操作是从应用程序调用 write 将要发送的数据交给协议栈开始的 协议栈并不是一收到数据就马上发送出去,而是会将数据存放在内部的发送缓冲区中,并等待应用程序的下一段数据(有些程序会一次性传递所有的数据,有些程序则会逐字节或者逐行传递数据。如果一收到数据就马上发送出去,就可能会发送大量的小包,导致网络效率下降,因此需要在数据积累到一定量时再发送出去(或时间,协议栈的内部有一个计时器,当经过一定时间之后,就会把网络包发送出去 - 给应用程序保留了控制发送时机余地

  分片 头部中,“序号”字段就是派在这个用场上的(发送数据的长度也需要告知接收方,不过这个并不是放在 TCP 头部里面的,因为用整个网络包的长度减去头部的长度就可以得到数据的长度) MTU(maximum transmission unit)表示一个网络包的最大长度,在以太网中一般是 1500 字节 - 调节它的意义,譬如特定程序发送的数据都类似(这时候可以设置MTU大小,特定数量的packet) MSS:Maximum Segment Size,最大分段大小。 TCP 和 IP 的头部加起来一般是 40 字节,因此 MTU 减去这个长度就是 MSS

  ack确认 返回 ACK 号时,除了要设置 ACK 号的值以外,还需要将控制位中的 ACK 比特设为 1,这代表 ACK 号字段有效,接收方也就可以知道这个网络包是用来告知 ACK 号的。 发送方说的是“现在发送的是从第 ×× 字节开始(发包的序号)的部分,一共有 ×× 字节哦!”而接收方则回复说,“到第 ×× 字节(回包的ack号)之前的数据我已经都收到了哦!” 这是因为如果序号都从 1 开始,通信过程就会非常容易预测,有人会利用这一点来发动攻击。但是如果初始值是随机的,那么对方就搞不清楚序号到底是从多少开始计算的 TCP 会在尝试几次重传无效之后强制结束通信,并向应用程序报错。

  网络繁忙拥塞 - TCP 会在发送数据的过程中持续测量 ACK 号的返回时间,如果 ACK 号返回变慢,则相应延长等待时间;相对地,如果 ACK 号马上就能返回,则相应缩短等待时间(否则一味等待或早早重传)

  2.3.5 使用窗口有效管理 ACK 号发送一个包就等待一个 ACK 号的方式是最简单也最容易理解的,但在等待 ACK 号的这段时间中,如果什么都不做那实在太浪费了。为了减少这样的浪费,滑动窗口,在发送一个包之后,不等待 ACK 号返回,而是直接发送后续的一系列包。处理不过来,当接收方的 TCP 收到包后,会先将数据存放到接收缓冲区中。然后,接收方需要计算 ACK 号,将数据块组装起来还原成原本的数据并传递给应用程序,如果这些操作还没完成下一个包就到了也不用担心,因为下一个包也会被暂存在接收缓冲区中。如果数据到达的速率比处理这些数据并传递给应用程序的速率还要快,那么接收缓冲区中的数据就会越堆越多,最后就会溢出。 接收方需要告诉发送方自己最多能接收多少数据,然后发送方根据这个值对数据发送操作进行控制,这就是滑动窗口方式的基本思路能够接收的最大数据量称为窗口大小38,它是 TCP 调优参数中非常有名的一个。 ack 和窗口合并: 在等待发送 ACK 号的时候正好需要更新窗口,这时就可以把 ACK 号和窗口更新放在一个包里发送,从而减少包的数量。并且在等待过程可省略发送,只要发送最终的结果就可以了。 客户端断开: (1)客户端发送 FIN (2)服务器返回 ACK 号 (3)服务器发送 FIN (4)客户端返回 ACK 号 客户端等待一会在删除套接字。 https://app.yinxiang.com/shard/s2/nl/959004983/23c26cda-ddbd-4ec2-8948-e5e5f184c277/TIME_WAIT和CLOSE_WAIT 和 recycle, reuse 最后客户端返回的 ACK 号丢失了,结果会如何呢?这时,服务器没有接收到 ACK 号,可能会重发一次 FIN。如果这时客户端的套接字已经删除了,会发生什么事呢?套接字被删除,那么套接字中保存的控制信息也就跟着消失了,套接字对应的端口号就会被释放出来。这时,如果别的应用程序要创建套接字,新套接字碰巧又被分配了同一个端口号48,而服务器重发的 FIN 正好到达,会怎么样呢?本来这个 FIN 是要发给刚刚删除的那个套接字的,但新套接字具有相同的端口号,于是这个 FIN 就会错误地跑到新套接字里面,新套接字就开始执行断开操作了。之所以不马上删除套接字,就是为了防止这样的误操作。

  2.5 包的基础

  网络包在传输过程中会经过集线器,集线器是根据以太网协议工作的设备。为了判断包接下来应该向什么地方传输,集线器里有一张表(用于以太网协议的表),可根据以太网头部中记录的目的地信息查出相应的传输方向。包会到达下一个路由器(图 2.16 ②)。路由器中有一张 IP 协议的表,可根据这张表以及 IP 头部中记录的目的地信息查出接下来应该发往哪个路由器。为了将包发到下一个路由器,我们还需要查出下一个路由器的 MAC 地址,并记录到 MAC 头部中,大家可以理解为改写了 MAC 头部ARP地址解析协议:在以太网中,有一种叫作广播的方法,可以把包发给连接在同一以太网中的所有设备。ARP 就是利用广播对所有设备提问:“×× 这个 IP 地址是谁的?请把你的 MAC 地址告诉我。 3从网线到网络设备——探索集线器、交换机和路由器 从客户端计算机发送的网络包通过家庭和公司局域网中的集线器和路由器前往目的地的过程。

  交换机工作于数据链路层,用来隔离冲突域,连接的所有设备同属于一个广播域(子网),负责子网内部通信。

  路由器工作于网络层,用来隔离广播域(子网),连接的设备分属不同子网,工作范围是多个子网之间,负责网络与网络之间通信。 ------------------------------------------------------ 举个例子: 家用宽带路由器,其实是交换机和路由器的结合体,有两个网络层接口,一个连接运营商网络,物理上也就是wan口,IP地址由运营商分配。另一个连接家庭网络,没有物理接口,IP地址由自己通过路由器管理界面配置,一般默认是192.168.1.1 那另外几个Lan口干什么用的?这就是交换机接口,和家庭网络接口相连,负责家庭网络内部通信。 3.2 交换机MAC地址表的维护:交换机在转发包的过程中,还需要对 MAC 地址表的内容进行维护.(删除地址表中某条记录的操作如移动设备断开) 路由器和交换机的关系路由器是基于 IP 设计的,而交换机是基于以太网设计的。IP(路由器)负责将包送达通信对象这一整体过程,而其中将包传输到下一个路由器的过程则是由以太网(交换机)来负责的在“查表判断转发目标”这一点上,路由器和交换机的大体思路是类似的,不过具体的工作过程有所不同。交换机是通过 MAC 头部中的接收方 MAC 地址来判断转发目标的,而路由器则是根据 IP 头部中的 IP 地址来判断的。由于使用的地址不同,记录转发目标的表的内容也会不同。 路由器根据“IP 地址”判断转发目标。路由器会忽略主机号,只匹配网络号。路由表的子网掩码列只表示在匹配网络包目标地址时需要对比的比特数量。默认路由/网关,本不需要匹配。只要将子网掩码设置为 0.0.0.0,那么无论任何地址都能匹配到这一条记录,这样就不会发生不知道要转发到哪里的问题了。 路由器的扩展功能:包过滤和地址转换公网和私网隔离。地址转换的基本原理是在转发网络包时对 IP 头部中的 IP 地址和端口号进行改写。首先,TCP 连接操作(如家里内网的iPad设备)的第一个包被转发到互联网时,会像图 3.18 这样,将发送方 IP 地址从私有地址改写成公有地址。这里使用的公有地址是地址转换设备52的互联网接入端口的地址。与此同时,端口号也需要进行改写,地址转换设备会随机选择一个空闲的端口。然后,改写前的私有地址和端口号,以及改写后的公有地址和端口号,会作为一组相对应的记录保存在地址转换设备内部的一张表中。互联网服务器返回的包的接收方就是改写后的公有地址和端口号。地址转换设备会从地址对应表中通过公有地址和端口号找到相对应的私有地址和端口号,并改写接收方信息,然后将包发给公司内网,这样包就能够到达原始的发送方了。实现从互联网访问家里/公司内网的:有时候我们希望能够从互联网访问公司内网,这需要进行一些设置才能实现。之所以无法从互联网访问内网,是因为对应表里没有相应的记录,那么我们只要事先手动添加这样的记录就可以了 包过滤就是在对包进行转发时,根据 MAC 头部、IP 头部、TCP 头部的内容55,按照事先设置好的规则决定是转发这个包,还是丢弃这个包。我们通常说的防火墙设备或软件,大多数都是利用这一机制来防止非法入侵的 PPP隧道 接入网分片大包

  4 接入网 将互联网理解为家庭、公司网络的一个放大版。

  1)ADSL 接入网的结构和工作方式

  家庭和公司的内网是通过接入网连接到网络运营商的。接入网有很多类型,这里我们将介绍 ADSL 接入网的知识,重点包括 ADSL 接入网的结构、电话线中传输的信号以及与电话共用的方式。

  (2)光纤接入网(FTTH)

  我们还会介绍另一种常用的接入网技术——与 ADSL 技术的利用率不相上下的光纤技术,重点包括光纤结构、单模和多模的区别之类的光纤性质,以及光纤用作接入网时的工作方式。

  (3)接入网中使用的 PPP 和隧道

  接入网需要通过用户名和密码验证用户的身份,然后由网络运营商向用户分配公有地址。此外,从接入网向网络运营商传输网络包时还使用了隧道技术,这些都是本章的看点。

  (4)网络运营商的内部接入网后面连接着网络运营商的网络,运营商网络也是以路由器为核心组成的,这

  一点和家庭、公司网络是一样的,包转发的工作原理也没有区别。不过,运营商网络也使用了一些和家庭、公司网络不同的技术,比如运营商之间可以自动交换路由信息和更新路由表,这些都是本章的看点。

  (5)跨越运营商的网络包互联网是由多个运营商网络相互连接形成的巨大网络,而多个运营商之间相互连接的部分可以说就是互联网的核心部分,这里也是本章的看点。 4.3 接入网中使用的PPP和隧道另一种基于封装(encapsulation)的隧道实现方式,这种方式是将包含头部在内的整个包装入另一个包中传输到隧道的另一端。在 5服务器端的局域网中有什么玄机 (CDN,服务器端/内网防火墙) 防火墙的结构和原理一般在 Web 服务器前面都会部署防火墙,那么防火墙是通过怎样的机制保护服务器的呢?这是我们的第二个看点。 内容分发服务是从缓存服务器发展而来的,它在互联网中部署很多缓存服务器,并将用户的访问引导到最近的缓存服务器上。那么如何才能找到离用户最近的缓存服务器呢?如何将用户的访问引导到这台服务器上呢?内容分发服务的结构还是非常耐人寻味的。 厂商称为 CDSP(content delivery service provider) ,他们会与主要的供应商签约,并部署很多台缓存服务器 。另一方面,CDSP 会与 Web 服务器运营者签约,使得 CDSP 的缓存服务器配合 Web 服务器工作、 互联网中有很多缓存服务器,如何才能从这些服务器中找到离客户端最近的一个(边缘的接近用户的),并让客户端去访问那台服务器呢?Web 服务器的域名只对应一个 IP 地址的情况,如果一个域名对应多个 IP 地址,则按照前面图 5.3 的轮询方式按顺序返回所有的 IP 地址。 DNS 就近:DNS服务器,作为准备,需要事先从缓存服务器部署地点的路由器收集路由信息。DNS服务器根据路由表查询自己和客户端 DNS 服务器的路由信息(知道先通过运营商 X,然后通过运营商 Y,最后到达运营商 Z 这样的信息,通过这样的信息可以大致估算出距离) 还有另一个让客户端访问最近的缓存服务器的方法。HTTP 规格中定义了很多头部字段,其中有一个叫作 Location 的字段重定向。先需要将重定向服务器注册到 Web 服务器端的 DNS 服务器上。收集了来自各个路由器的路由信息,并根据这些信息找到最近的缓存服务器,然后将缓存服务器的地址放到 Location 字段中返回响应。 6 服务器概览 服务器的套接字和端口号 bind讲端口号写入套接字,listen向套接字写入等待状态这一控制信息。调用accept来接受连接, 当再次调用 accept,客户端连接包到达时,它又可以再次执行接受连接操作。接受新的连接之后,和刚才一样,协议栈会为这个等待连接的套接字复制一个新的副本,然后让客户端连接到这个新的副本套接字上。像这样每次为新的连接创建新的套接字就是这一步操作的一个关键点。如果不创建新副本,而是直接让客户端连接到等待连接的套接字上,那么就没有套接字在等待连接了,这时如果有其他客户端发起连接就会遇到问题。为了避免出现这样的情况,协议栈采用了这种创建套接字的新副本,并让客户端连接到这个新副本上的方法 端口号是用来识别套接字的,如果一个端口号对应多个套接字,就无法通过端口号来定位到某一个套接字了. 服务器上可能存在多个端口号相同的套接字,但客户端的套接字都是对应不同端口号的,因此我们可以通过客户端的端口号来确定服务器上的某个套接字。在套接字刚刚创建好,还没有建立连接的状态下,这 4 种信息是不全的,描述符还是简便

  服务器端: 协议栈的 IP 模块会检查 IP 头部,(1) 判断是不是发给自己的( 服务器操作系统中内置了可实现路由器功能的软件,只要启用这一功能,服务器就可以像路由器一样工作);(2) 判断网络包是否经过分片;(如果是分片的包,则将包暂时存放在内存中,等所有分片全部到达之后将分片组装起来还原成原始包;)(3) 将包转交给TCP 模块或UDP模块。(检查 IP 头部的协议号字段。06-十六进制)

  如果收到的是发起连接的包,则 TCP 模块会(1) 确认 TCP 头部的控制位SYN;(2) 检查接收方端口号;(3) 为相应的等待连接套接字复制一个新的副本;(4) 记录发送方 IP 地址和端口号等信息。

  收到数据包时,TCP 模块会(1) 根据收到的包的发送方 IP 地址、发送方端口号、接收方 IP 地址、接收方端口号找到相对应的套接字;(2) 将数据块拼合起来并保存在接收缓冲区中;(根据套接字中保存的上一个序号和数据长度计算下一个序号,并检查与收到的包的 TCP 头部中的序号是否一致 。然后存放到接收缓冲区中,与上次收到的数据块连接起来)(3) 向客户端返回ACK。

  断开操作: 服务器程序会调用 Socket 库的 close,TCP 模块会生成一个控制位 FIN 为 1 的 TCP 头部,并委托 IP 模块发送给客户端。当客户端收到这个包之后,会返回一个 ACK 号。接下来客户端调用 close,生成一个 FIN 为 1 的 TCP 头部发给服务器,服务器再返回 ACK 号,这时断开操作就完成了。HTTP1.1 中,是客户端先发起断开操作,这种情况下只要将客户端和服务器的操作颠倒一下就可以了。 套接字再此后会被删除(或者复用?!

  《网络是怎样连接的》读后感(四):一次畅快淋漓的旅程

  这书目前只看了一半,已经迫不及待在豆瓣上打了五星。 由在浏览器中一次请求响应的过程在计算机内部是如何处理的这个问题出发,从HTTP层的请求响应协议到Socket的创建、连接、收发数据再到传输层、网络层、数据链路层的逐步添加各层协议的包头,到物理层将数据在局域网上传输,又是如何将0101的数字信号转换成实际物理层面的电光信号,经过集线器、交换机、路由器之间的传递到达最终目的地。讲的内容实际和大学里的《计算机网络》课程点几乎一样,但全书翻译的还是挺流畅简洁准确的,可以看出作者对于这个问题思考过程中层层递进环环相扣的追问与回答,亦足见译者的文笔和专业技术功底。 “问题意识”这个概念我大概是看秦晖先生的文章里提到的,学术界比较重视这个东西,大概意思是【问一个问题,不会是凭空想象出来的,一定是在某个特别情境产生的疑问,比如面对一个特殊时空下的历史事件,或是和某个理论对话,试图回应它能回答或不能回答的问题。而回答为什么要问这个问题的解释,就构成了发问的问题意识】。简单讲问题就是一个很简单的疑问,而问题意识涉及你在什么情境下产生这个疑问。所以问题是问题意识的结果,问题意识是形成问题的过程。 前几天一个在小米工作的朋友在讨论组里问我java里的socket通信在计算机上到底是如何工作的,这个问题认真解释起来涉及计算机网络上数据在七层协议之间流转过程和Java程序如何调用操作系统层面的socket库,还是挺费口水的。我好奇的是为什么会产生这个问题,原来他最近在做rpc调用的东西,java层面的api琢磨久了难免想再进一步,深挖更底层的东西,了解被api封装的严严实实的java本地调用背后的运行机制,程序员能思考到这个程度显然技术上又将精进不少。私以为这种才是求学问道的正途,我好像很久没有这种不断思考追问的状态了。 上面不厌其烦的解释“问题意识”这个概念就是想说知识问答已经非常活跃的当下,问题已经不再重要,绝大多数都能找到答案(程序员社区三大利器Google GitHub Stackoverflow),再不济去百度知道知乎啥的问问也会有收获。反而是产生问题的过程更重要,因为这表明提问者经历了哪些思考,思考的广度和深度。 前几天阮一峰老师一条讲socket的微博引起了一堆人的共鸣,当年学计算机时就被很多术语的中文翻译弄得一头雾水,比如套接字(socket)、句柄(handle)、正则表达式(regular)、宏(Macro)等等,反正看起来别扭极了,导致很多时候涉及这些术语文章看起来总觉得不自然,有滞涩感。 书中第2章最后恰好解释了socket这个词,原来是取自灯泡插座的的意思,就是那种老式的螺丝灯泡里凹进去的可以往里插东西的圆孔。

评价:中立好评差评
【已有2位读者发表了评论】

┃ 网络是怎样连接的的读后感10篇的相关文章

┃ 每日推荐