最近在读《Unix网络编程》和《TCP/IP详解》两本书,有了一些自己的心得与体会,总结下其中典型的问题。

1. 为什么建立连接需要三次握手?

  谢希仁的《计算机网络》对这个问题有以下分析:

  服务端接到客户端的syn之后在发送ack的同时还要顺带一个syn来让客户端再发送一个ack相应这个syn.这主要是由于链路的不可靠,客户端发送的连接请求用了很长时间到达服务器,而再此之前客户端很可能因为迟迟没收到服务器端的相应而重发了该连接请求并顺利到达服务器,服务端相应该请求。而之前的连接请求终于到达了该服务器,如果服务器不向客户端发送syn,那么这个连接请求就会被服务器认为是一个有效的连接请求而占用相应的服务器资源,而实际上这只是一个超时到达的连接请求。因此需要服务器端强制重新发送一个syn来向客户端确认之前,客户端发送的syn是有效的。

  这个解释基本上我觉得还是比较好的,但是如果面试的时候如果能说出自己对问题的理解就更好了。我们先来分析下:syn的主要作用是建立连接,与一般的TCP报文的锁不同是的其TCP选用字段有MSS(最大报文长度字段)也就是说通过syn,客户端和服务端分别向对方通报了自己的最大的报文长度。

2. TIME_WAIT是2MSL的作用

  MSL是报文在网络中的最长存活时间。在主动关闭连接的一端发送最后一个ACK之后为了确认对方能够收到这个ACK必须处于等待状态,数据报文在源节点和目的节点之间往返的最长时间就是2MSL。如果不等待这个2MSL而是发送ACK之后直接关闭连接,那么如果被动关闭方没收到ACK之后会进行重传,而主动关闭方由于已经关闭该连接了,所以会直接响应RST,被动关闭方会认为这是一个错误。

3. 什么是全双工?UDP是全双工的吗?

  关于半双工可以看IPC中的管道通信,创建一个管道,管道需要绑定两个文件描述符readfd和writefd,分别用来读和写。也就是说读写需要分开用两个文件描述符才能完成。而全双工指的是一个文件描述符能同时完成读写操作。在socket编程中,无论是TCP还是UDP都可以用一个文件描述符来完成读写,因此TCP和UDP都是全双工通信。

4. QQ采用的是TCP还是UDP?QQ传输文件采用的是TCP还是UDP?

  我先说说自己的观点,QQ采用的是UDP,这里的UDP在应用上加入了序号、确认机制、超时重传,机制来保证一定程度上的可靠连接;第二是因为UDP不需要建立连接,服务器开销小,比如如果每次只需要发送很少数据到对端,导致建立连接开销很大。
  QQ传输文件采用UDP我觉得主要是考虑到UDP没有流量控制,发送端发送的数据很容易填满接收端的缓冲区,《Unix网络编程》的203,面给了一个例子,大概说的是UDP发送2000个1400字节的文件,接收端只能收到30个。因此传输较大的数据文件最好采用TCP传输。

5. 怎样用udp协议完成可靠传输?
  几乎所有的UDP通信都是经过改进的UDP协议。UDP协议不用创建连接,对短连接少量数据的传输是比较有优势的。为了保证传输的可靠性,会在应用层的发送端加上报文序号,超时重传,接收端确认报文等方式来保证可靠地传输。

TCP/UDP基本概念部分的更多相关文章

  1. HTTP TCP UDP Socket 关系的几个经典图

      从上图可以看到,TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. ...

  2. HTTP,FTP,TCP,UDP及SOCKET

    一.TCP/IP协议简析TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层:网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议传输层:TCP协议与UDP协议应用层:F ...

  3. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  4. TCP/UDP详解

    转载:http://www.cnblogs.com/visily/archive/2013/03/15/2961190.html, 作者:望梅止渴 相关: HTTP协议详解  深入理解HTTP协议 T ...

  5. [原]TCP/UDP使用细节备忘

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  6. IP,TCP,UDP Checksum校验

    IP数据报的校验: IP数据报只需要对数据头进行校验,步骤如下: 将接收到的数据的checksum字段设置为0 把需要校验的字段的所有位划分为16位(2字节)的字 把所有16位的字相加,如果遇到进位, ...

  7. SOCKET,TCP/UDP,HTTP,FTP

    (一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...

  8. [网络] SOCKET, TCP/UDP, HTTP, FTP

    (一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...

  9. High Performance Browser Networking - TCP UDP TLS

    延迟 定义和标准延迟 延迟简单地说,它是一种转移或信息包从起点到终点,所花费的时间. 延迟=发送延迟+传播延迟+处理延迟+排队延迟: Propagation delay 传播时延 传播时延这个概念.是 ...

随机推荐

  1. Android 逐帧动画isRunning 一直返回true的问题

    AnimationDrawabl主要通过xml实现逐帧动画,SDK实例如下: An AnimationDrawable defined in XML consists of a single < ...

  2. 【转】MFC中调试过程中查看输出信息 -- 不错

    原文网址:http://blog.sina.com.cn/s/blog_4e24d9c501014o39.html 笔记&&方便查阅. ~~~~~~~~~~~~~~~~~~~~~~~~ ...

  3. 参数化时按行读取txt文件,如何去掉换行符"\n"

    参数化按行读取txt,每行默认自带了回车换行操作,导致脚本报错,故而按行读取时,需要去掉默认的'\n' #coding=utf-8 from selenium import webdriver imp ...

  4. UIView hitTest的原理

    [转自:http://blog.sina.com.cn/s/blog_59fb90df0101ab26.html] UIView 两个方法: - (UIView *)hitTest:(CGPoint) ...

  5. UIAlertView的使用

    UIAlertView是用于弹出一个对话框进行选择或者消息提示 构造函数:     UIAlertView * alert = [[UIAlertViewalloc] initWithTitle:@& ...

  6. 4G

    4G网络的概念是什么 浏览:5461 | 更新:2013-02-16 15:08 4G是第四代无线传输技术的缩写,它是宽带移动通信阶段,是继3G的标准的另一个阶段.随着Internet及多媒体技术的快 ...

  7. Eclipse svn图标不显示

    在菜单栏中:windows ->preferences->General->Appearance->Lable Decorations 勾选其中的 SVN 项,最后应用确认之后 ...

  8. weblogic 日志介绍

    1.server.log 该日志记录的是服务(包括admin server 和 app server)启动过程中和关闭过程中的日志,还包括部署在服务上面的应用,在运行过程中所产生的日志. server ...

  9. disconf实践(二)

    因为有些系统的配置文件会随着业务更改,如某些控制开关,当大批量集群时,按照上一篇文章的配置就不够啦,需要做到热加载. 研究了一下,还好,比较简单,只要替换上一篇文章第4步的配置文件(spring-di ...

  10. Delphi ListView基本用法大全

    //增加项或列(字段) ListView1.Clear; ListView1.Columns.Clear; ListView1.Columns.Add; ListView1.Columns.Add; ...