摘要: 2.5.3 生成包含接收方 IP 地址的 IP 头部 IP头部包含的内容 IP 模块接受 TCP 模块的委托负责包的收发工作,它会生成 IP 头部并附加在 TCP 头部前面。 IP 头部包含的内容如表 2.2 所示,其中最重要的内容就是 IP 地址,它表示这个包应该发到哪里去。 接受方IP地址:应用 阅读全文
posted @ 2018-11-15 22:26 田错 阅读(466) 评论(0) 推荐(0) 编辑
摘要: 2.5 IP与以太网的包收发操作 2.5.1 包的基本知识 TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成包发送给通信对象。 我们在 TCP 的讲解中也经常提到 IP,下面就来讨论一下 IP 模块是如何将包发送给对方的。 包的基本结构 包是由头部和数据两部分构成 阅读全文
posted @ 2018-11-15 21:35 田错 阅读(1013) 评论(0) 推荐(0) 编辑
摘要: 2.4 从服务器断开并删除套接字 2.4.1 数据发送完毕后断开连接 收发数据结束的时间点应该是应用程序判断所有数据都已经发送完毕的时候。 这时,数据发送完毕的一方会发起断开过程,但不同的应用程序会选择不同的断开时机。 以 Web 为例,浏览器向 Web 服务器发送请求消息,Web 服务器再返回响应 阅读全文
posted @ 2018-11-15 20:35 田错 阅读(527) 评论(0) 推荐(0) 编辑
摘要: 2.3.4 根据网络包平均往返时间调整 ACK 号等待时间 网络堵塞后TCP会重传网络包 前面说的只是一些基本原理,实际上网络的错误检测和补偿机制非常复杂。 首先是返回 ACK 号的等待时间,这个等待时间叫超时时间。 当网络传输繁忙时就会发生拥塞,ACK 号的返回会变慢。 这时我们就必须将等待时间设 阅读全文
posted @ 2018-11-15 16:53 田错 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 2.3 收发数据 2.3.1 将 HTTP 请求消息交给协议栈 当控制流程从 connect 回到应用程序之后,接下来就进入数据收发阶段了。 数据收发操作是从应用程序调用 write 将要发送的数据交给协议栈开始的,协议栈收到 数据后执行发送操作,这一操作包含如下要点。 协议栈并不关心应用程序传来的 阅读全文
posted @ 2018-11-15 15:22 田错 阅读(550) 评论(0) 推荐(0) 编辑
摘要: 2.2 连接服务器 2.2.1 连接是什么意思 连接时发生了什么 客户端创建套接字告知服务器我要通信 创建套接字之后,应用程序就会调用 connect。随后协议栈会将本地的套接字与服务器的套接字进行连接。 在调用 socket 创建套接字时,我们需要把服务器的 IP 地址和端口号等信息告知协议栈,这 阅读全文
posted @ 2018-11-15 14:11 田错 阅读(1324) 评论(0) 推荐(0) 编辑