最近在读《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. BZOJ1612: [Usaco2008 Jan]Cow Contest奶牛的比赛

    1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 645  Solved: 433 ...

  2. iso学习网站记录

    [零基础学习iOS开发] http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 非零基础学习iOS开发2-Objective-C h ...

  3. 【转】SVN服务器端安装、配置与管理--不错

    原文网址:http://blog.csdn.net/qq505810824/article/details/7824929 搭建svn服务的方法步骤问题,主要有七个部分 .下面是具体的步骤介绍.   ...

  4. 新图形API为unity5 带来了什么&下一代新图形API的好处

    西瓜的演讲ppt翻译+解释+其他: wolf96 在最基本的层面上,这些新api是为了改进CPU性能和效率,通过:减少CPU渲染瓶颈的情况,提供更多可预测和稳定的驱动的行为,给应用程序更多控制,就像在 ...

  5. C++之函数指针

    函数指针常用的有三类 1.指向普通函数的函数指针 2.指向类中静态成员函数的函数指针 3.指向类的成员函数的函数指针 一.指向普通函数的函数指针 #include <iostream> u ...

  6. UVa 11077 Find the Permutations(置换+递推)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35431 [思路] 置换+递推 将一个排列看作一个置换,分解为k个循 ...

  7. UVA10054 The Necklace

    UVA10054 The Necklace 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18806 [思路] 欧拉回路 ...

  8. Spoj 7001 Visible Lattice Points 莫比乌斯,分块

    题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37193   Visible Lattice Points Time L ...

  9. linux-kernel/CodingStyle

    https://www.kernel.org/doc/Documentation/zh_CN/CodingStyle Chinese translated version of Documentati ...

  10. openStack云平台虚拟桌面galera mysql 3节点集群实例实战