T C P提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。这就是所谓
下载
的半关闭。正如我们早些时候提到的只有很少的应用程序使用它。
为了使用这个特性,编程接口必须为应用程序提供一种方式来说明“我已经完成了数据
传送,因此发送一个文件结束( F I N)给另一端,但我还想接收另一端发来的数据,直到它给
我发来文件结束(F I N)”。
如果应用程序不调用c l o s e而调用s h u t d o w n,且第2个参数值为1,则插口的A P I支持
半关闭。然而,大多数的应用程序通过调用close终止两个方向的连接。

为什么要有半关闭?一个例子是 U n i x中的r s h( 1 )命令,它将完成在另一个系统上执行一
个命令。命令
sun % rsh bsdi sort < datafile
将在主机b s d i上执行s o r t排序命令,r s h命令的标准输入来自文件d a t a f i l e。r s h将在它
与在另一主机上执行的程序间建立一个 T C P连接。 r s h的操作很简单:它将标准输入
(d a t a f i l e)复制给T C P连接,并将结果从 T C P连接中复制给标准输出(我们的终端)。图显示了这个建立过程(牢记TCP连接是全双工的)。

在远端主机b s d i上,r s h d服务器将执行s o r t程序,它的标准输入和标准输出都是 T C P
连接。
s o r t程序只有读取到所有输入数据后才能产生输出。所有的原始数据通过 T C P连接从
r s h客户端传送到s o r t服务器进行排序。当输入( d a t a f i l e)到达文件尾时, r s h客户端
执行这个T C P连接的半关闭。接着s o r t服务器在它的标准输入(这个 T C P连接)上收到一个
文件结束符,对数据进行排序,并将结果写在它的标准输出上( T C P连接)。r s h客户端继续
接收来自T C P连接另一端的数据,并将排序的文件复制到它的标准输出上。
没有半关闭,需要其他的一些技术让客户通知服务器, 客户端已经完成了它的数据传送,但
仍要接收来自服务器的数据。使用两个T C P连接也可作为一个选择,但使用半关闭的单连接更好。

TCP的半连接的更多相关文章

  1. tcp的半连接与完全连接队列

    队列及参数 https://segmentfault.com/a/1190000008224853 server端的半连接队列(syn队列) 在三次握手协议中,服务器维护一个半连接队列,该队列为每个客 ...

  2. (转)tcp的半连接与完全连接队列

    队列及参数   tcp-sync-queue-and-accept-queue-small.jpg server端的半连接队列(syn队列) 在三次握手协议中,服务器维护一个半连接队列,该队列为每个客 ...

  3. tcp的半连接与完全连接队列(二)

    队列及参数 server端的半连接队列(syn队列) 在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户端的SYN包开设一个条目(服务端在接收到SYN包的时候,就已经创建了request_s ...

  4. tcp的半连接与完全连接队列(三)源码分析

    TCP 协议中的 SYN queue 和 accept queue 处理 若要理解本文意图说明的问题,可能需要以下知识背景: listen 系统调用的 backlog 参数含义,以及与 net.cor ...

  5. PYTHON-网络通信 TCP

    网络编程: 学习网络编程 为什么?目的: 服务端特点: 网络通讯(通信) 什么是网络通讯? 为什么?目的:网络建立的目的是为数据交互(通信) 如何实现通讯(通信)? 互联网协议 互联网=物理连接介质+ ...

  6. TCP/IP编程——基于TCP的半关闭

    在TCP服务端和客户端建立连接之后服务端和客户端会分别有两个独立的输入流和输出流,而且相互对应.服务端的输出流对应于客户端的输入流,服务端的输入流对应于客户端的输出流.这是在建立连接之后的状态. 当我 ...

  7. 7.4 (java学习笔记)网络编程之TCP

    一.TCP 1.1 TCP(Transmission Control Protocol 传输控制协议),是一种面向连接的,安全的传输协议,但效率相比于UDP而言比较低. TCP传输时需要确保先建立连接 ...

  8. 常见问题:计算机网络/运输层/TCP

    TCP 面向连接,全双工,点对点. TCP头格式 TCP包没有IP地址,IP地址在网络层的IP协议中,TCP包包括源端口号,目标端口号 一个TCP连接需要四个元祖表明是同一连接(src_ip,src_ ...

  9. TCP的三次握手四次挥手理解及面试题

    一.TCP概述 每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字, 例如,若IP地址为192.0.0.1 而端口号为8000,那么得到 ...

随机推荐

  1. [转帖]Docker中的时区问题处理

    Docker中的时区问题处理 这两天在打docker的时候,发现自己的容器启动之后,里面date -R的输出时区是UTC,总是和北京时间差了8个小时. 作者:云平台运维开发来源:今日头条|2019-0 ...

  2. jmeter XLSX 读取

    import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFSheet; i ...

  3. MySQL 数据库连接命令

    启动数据库服务 格式: net   start    数据库名 net start  mysql57 关闭数据库服务 格式: net   stop   数据库名 net stop mysql57 链接 ...

  4. MySQL explain功能展示的各种信息的解释

    1.id: MySQL Query Optimizer 选定的执行计划中查询的序列号. 2.select_type: 所使用的查询类型,主要有以下这几种查询类型.  DEPENDENT SUBQUER ...

  5. mongo与spring集合

    1.加入lib包,在Maven中 <dependency> <groupId>org.springframework.data</groupId> <arti ...

  6. CentOS 7.X 静默安装Oracle 12C数据库

    环境 System : CentOS 7.x jrxxfwb-zrgldb://> uname -a Linux jrxxfwb-zrgldb 3.10.0-693.17.1.el7.x86_6 ...

  7. Luogu4081 USACO17DEC Standing Out from the Herd(广义后缀自动机)

    建出广义SAM,通过parent树对每个节点求出其是否仅被一个子串包含及被哪个包含. 写了无数个sam板子题一点意思都没啊 #include<bits/stdc++.h> using na ...

  8. MySQL 解决source 命令导入数据库 乱码

    在我把库.表.sql脚本的编码格式都设置为UTF-8后,任然有乱码,任然有报错: 于是按以下方式重新登录后,解决: mysql -u root -p --default-character-set=u ...

  9. vue实现web登陆权限控制

    实现原理:vueRouter控制前端页面跳转路由,当登录成功后,返回用户登录token信息,将token信息放到store中,router路由跳转取store中状态有token时,当取到token时跳 ...

  10. ( 十二)Json的使用(上)

    一.什么是JSON 1.1 javaScript中定义对象的几种方式 使用内置对象 自定义对象构造 使用JSON符号  (1)使用内置对象 JavaScript可用的内置对象可分为两种: 1,Java ...