4.1 TCP连接

  TCP为HTTP提供了一条可靠的比特传输管道,按顺序正确的传输,步骤如下:

  1. 浏览器解析主机名。
  2. 查询这个主机名的IP地址(DNS)
  3. 获得端口号。
  4. 浏览器对服务器该端口号发起连接。
  5. 向服务器发送请求报文。
  6. 从服务器获取响应报文。
  7. 连接关闭。

4.1.2 TCP流是分段的、由IP分组传送

  TCP的数据是通过名为IP分组的小数据块来发送的。Http发送一份报文时,会以流的形式建立一条TCP连接按序传输。

  TCP在接收到流之后会将数据流砍成被称作段的小数据块,封装在IP分组中,通过因特网传输。

  每个TCP段由IP分组承载,每个IP分组包括:

    • 一个IP分组首部(20字节)
    • 一个TCP段首部(20字节)
    • 一个TCP数据块(0个或多个字节)

  IP首部包含源和目的的IP地址、长度和其他一些标记

  TCP段首部包含:TCP端口、控制标记等

4.1.3 用TCP套接字编程

  1.   s=socket(parameters)                   创建一个新的、未命名的套接字
  2.   bind(s,local IP:Port)                    向套接字赋一个本地IP及端口
  3. connect(s,remote IP:port)         创建与服务器的连接
  4. listen(s,...)                                    标识一个本地套接字,使其可以合理接收连接
  5. s2=accep(s)                                  等待某人建立一条到达本地端口的连接
  6. n=read(s,buffer,n)                     尝试从套接字缓存区读取n个字节
  7. n=write(s,buffer,n)                    尝试从缓存区向套接字写入n个字节
  8. close(s)                                        完全关闭TCP连接
  9.   shutdown(s,side)                         只关闭TCP连接的输入或输出端
  10.   getsocket(s,...)                            读取某个内部套接字配置选项的值
  11.   Setscoket(s,...)                            修改某个内部套接字配置选项的值

  例(盗图):

    

    注:先是请求连接,在连接成功才会发送报文。

4.2 TCP性能

  TCP连接握手需要以下步骤:

  1. 请求新的TCP连接时客户端向服务端附送笑的TCP分组,这个分组设置了SYN标记,表明是一个连接请求。
  2. 服务器接受连接,返回一个TCP分组。
  3. 客户端向服务端发送一条确认信息,现在可以传送数据了。

4.2.2 串行事物处理时延

  如果同时请求多个请求报文时,TCP的性能延时会叠加起来。以下几种可提高性能方法:

  1.并行连接

    通过多条TCP连接发起并发的HTTP请求。

  2.持久连接

    重用TCP连接,以消除连接及关闭延时。

  3.管道化连接

     通过共享的TCP连接发起并发HTTP的请求。

  4.复用连接

    交替发送请求和响应报文(试验阶段)

    

最新文章

  1. git 常用操作命令
  2. Scipy学习笔记 矩阵计算
  3. php excel读取
  4. iOS 自定义UITableViewCell
  5. JavaSE、JavaEE、JavaME三者的区别
  6. Lua 学习笔记(一)
  7. 红黑树和AVL树的实现与比较-----算法导论
  8. SpringBoot入门Demo
  9. Hadoop 错误归档库
  10. eclipse如何debug调试jdk源码(任何源码)并显示局部变量
  11. iis7设置ftp
  12. C语言面试题分类->排序算法
  13. IntelliJ IDEA 和谐地址及快捷键
  14. BZOJ2150部落战争——最小路径覆盖
  15. mybatis-查询过程
  16. Java微信二次开发(八)
  17. TNS-12537,TNS-12560,TNS-00507 Linux Error: 29: Illegal seek解决
  18. SQL之GROUP BY 语句
  19. 一款简单实用的jQuery图片画廊插件
  20. CAN中如何计算波特率并配置波特率

热门文章

  1. sql server远程备份和恢复
  2. LeetCode "Third Maximum Number"
  3. rails下react的demo
  4. 拥有的50个CSS代码片段(上)
  5. jQuery中attr()、prop()、data()用法及区别
  6. bootstrap-提示标签、提示框
  7. CRM Diagnostics CRM 2016 诊断
  8. X.509证书生成
  9. [源码]DataIOStream 数据流 处理基本数据类型的流
  10. 用户体验学习笔记(工程中发现的PM常犯错误)