HTTP权威指南(读书笔记)2

原创 2015年07月10日 14:52:25

第四章  链接管理

TCP连接
世界上几乎所有的HTTP 通信都是由TCP/IP 承载的,TCP/IP 是全球计算机及网络
设备都在使用的一种常用的分组交换网络分层协议集。客户端应用程序可以打开一
条TCP/IP 连接,连接到可能运行在世界任何地方的服务器应用程序。一旦连接建
立起来了,在客户端和服务器的计算机之间交换的报文就永远不会丢失、受损或
失序。
TCP 为HTTP 提供了一条可靠的比特传输管道。从TCP 连接一端填入的字节会从另
一端以原有的顺序、正确地传送出来

HTTP 要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的TCP 连
接按序传输。TCP 收到数据流之后,会将数据流砍成被称作段的小数据块,并将段
封装在IP 分组中,通过因特网进行传输。

在任意时刻计算机都可以有几条TCP 连接处于打开状态。TCP 是通过端口号来保持
所有这些连接的正确运行的。
端口号和雇员使用的电话分机号很类似。就像公司的总机号码能将你接到前台,而
分机号可以将你接到正确的雇员位置一样,IP 地址可以将你连接到正确的计算机,
而端口号则可以将你连接到正确的应用程序上去。TCP 连接是通过4 个值来识别的:
< 源IP 地址、源端口号、目的IP 地址、目的端口号>
这4 个值一起唯一地定义了一条连接。两条不同的TCP 连接不能拥有4 个完全相同
的地址组件值(但不同连接的部分组件可以拥有相 同的值)。

    套接字  API  调用                                                      描  述
s = socket(<parameters>)              创建一个新的、未命名、未关联的套接字
bind(s,<local IP:port>)                     向套接字赋一个本地端口号和接口
connect(s, <remote IP:port>)          创建一条连接本地套接字与远程主机及端口的连接
listen(s,...)                                         标识一个本地套接字,使其可以合法接受连接
s2 = accept(s)                                  等待某人建立一条到本地端口的连接
n = read(s, buffer, n)                        尝试从套接字向缓冲区读取n 个字节
n = write(s, buffer, n)                        尝试从缓冲区中向套接字写入n 个字节
close(s)                                             完全关闭TCP 连接
shutdown(s,<side>)                         只关闭TCP 连接的输入或输出端
getsockopt(s,...)                               读取某个内部套接字配置选项的值
setsockopt(s,...)                               修改某个内部套接字配置选项的值

图4-1 显示了Web 浏览器是如何用HTTP 从Joe 的五金商店下载power-tools.html
页面的。图4-6 中的伪代码说明了可以怎样通过套接字API 来凸显客户端和服务器
在实现HTTP 事务时所应执行的步骤。

图4-6 TCP 客户端和服务器是如何通过TCP 套接字接口进行通信的

   HTTP 紧挨着TCP,位于其上层,所以HTTP 事务的性能在很大程度上取决于底层
TCP 通道的性能。

本节其余部分列出了一些会对HTTP 程序员产生影响的、最常见的TCP 相关时延,
其中包括:
• TCP 连接建立握手;
• TCP 慢启动拥塞控制;
• 数据聚集的 Nagle 算法;
• 用于捎带确认的 TCP 延迟确认算法;
• TIME_WAIT 时延和端口耗尽。
如果要编写高性能的HTTP 软件,就应该理解上面的每一个因素。如果不需要进行
这个级别的性能优化,可以跳过这部分容。

  TCP连接的握手时延

TCP 连接握手需要经过以下几个步骤。
(1) 请求新的TCP 连接时,客户端要向服务器发送一个小的TCP 分组(通常是40 ~
60 个字节)。这个分组中设置了一个特殊的SYN 标记,说明这是一个连接请求。
(参见图4-8a)。
(2) 如果服务器接受了连接,就会对一些连接参数进行计算,并向客户端回送一个
TCP 分组,这个分组中的SYN 和ACK 标记都被置位,说明连接请求已被接受
(参见图4-8b)。
(3) 最后,客户端向服务器回送一条确认信息,通知它连接已成功建立(参见图4-8c)。
现代的TCP 栈都允许客户端在这个确认分组中发送数据。


每个TCP 段都有一个序列号和数据完整性校验和。每个段的接收者收到完好的段
时,都会向发送者回送小的确认分组。如果发送者没有在指定的窗口时间内收到确
认信息,发送者就认为分组已被破坏或损毁,并重发数据。






版权声明:本文为博主原创文章,未经博主允许不得转载。

《HBase权威指南》读书笔记:第二章 安装

基本操作 首先确保已经安装Java。通过java -version命令查看,要求版本1.7以上。 下载hbase: http://www.apache.org/dyn/closer.cgi/hbase...
  • caipeichao2
  • caipeichao2
  • 2017年06月01日 19:49
  • 217

《HBase权威指南》读书笔记2

2.1快速启动指南hbase-site.xml 里面的 hbase.rootdir 记得要修改否则默认是在 /tmp/hbase-${user.name} 下,如果服务器重启数据就有可能会丢失...
  • nsrainbow
  • nsrainbow
  • 2015年10月16日 16:45
  • 1353

《HBase权威指南》读书笔记1

1.4 HBase结构1.4.2 HBase 的表、列和单元格基本单位是column多column组成row一个row有唯一rowkey每个column有多个版本,多个版本存储在单元格(cell)中行...
  • nsrainbow
  • nsrainbow
  • 2015年10月14日 17:13
  • 1915

Netty权威指南读书笔记(二)

1.CS模型 两个进程间的交互。 服务端:提供位置信息(绑定的IP地址+监听端口)。 客户端:通过连接操作像服务端监听的地址发起请求。通过三次握手建立连接,成功后就可以通过socket进行通信...
  • xxcupid
  • xxcupid
  • 2016年01月10日 14:47
  • 364

《HTTP权威指南》学习笔记(一)

《HTTP权威指南》学习笔记(一)-第一部分 HTTP:Web的基础(描述Web的基础构件与HTTP的核心技术)(1-4章)...
  • ggf123456789
  • ggf123456789
  • 2015年05月08日 09:19
  • 645

Kubernetes权威指南学习笔记(一)

概念 Kubernetes是谷歌严格保密十几年的秘密武器——Borg的一个开源版本,是Docker分布式系统解决方案。 名词 Borg Borg是谷歌内部使用的大规模集群管理系统,...
  • keysilence1
  • keysilence1
  • 2017年04月20日 10:17
  • 2598

Netty权威指南 第2版学习笔记3——Netty NIO开发指南

Netty入门应用Netty开发环境的搭建 使用Eclipse创建普通Java项目 从http://netty.io/下载 TCP粘包/拆包问题的解决之道分隔符和定长解码器的应用...
  • xundh
  • xundh
  • 2017年01月01日 22:00
  • 643

《HBase权威指南》读书笔记8:第八章 架构

8.1 数据查找和传输B+树:B+树比B树的改进为叶子节点也是顺序排放的LSM(log-structured merge-tree)树存储系统概述...
  • nsrainbow
  • nsrainbow
  • 2015年10月26日 00:48
  • 2025

ELK学习5_ELK文档资料:《ELK stack 权威指南/饶琛琳》推荐

《ELK stack 权威指南/饶琛琳》的内容在网上共享有电子版,网站地址是: http://kibana.logstash.es/...
  • wang_zhenwei
  • wang_zhenwei
  • 2015年10月26日 17:42
  • 11959

http权威指南(一)-Http概述

Http概述  在Web中,无论是浏览器还是服务器都是通过Http相互通信的。那么Http是如何工作的呢?   首先,客户端向服务器发送Http请求,服务器会在Http响应中回送所请求的数据。如图: ...
  • u014071426
  • u014071426
  • 2015年07月14日 22:41
  • 494
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTP权威指南(读书笔记)2
举报原因:
原因补充:

(最多只允许输入30个字)