TCP/UDP基本概念部分
最近在读《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?
5. 怎样用udp协议完成可靠传输?
几乎所有的UDP通信都是经过改进的UDP协议。UDP协议不用创建连接,对短连接少量数据的传输是比较有优势的。为了保证传输的可靠性,会在应用层的发送端加上报文序号,超时重传,接收端确认报文等方式来保证可靠地传输。
TCP/UDP基本概念部分的更多相关文章
- HTTP TCP UDP Socket 关系的几个经典图
从上图可以看到,TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. ...
- HTTP,FTP,TCP,UDP及SOCKET
一.TCP/IP协议简析TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层:网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议传输层:TCP协议与UDP协议应用层:F ...
- TCP/IP基础概念及通信过程举例
TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...
- TCP/UDP详解
转载:http://www.cnblogs.com/visily/archive/2013/03/15/2961190.html, 作者:望梅止渴 相关: HTTP协议详解 深入理解HTTP协议 T ...
- [原]TCP/UDP使用细节备忘
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- IP,TCP,UDP Checksum校验
IP数据报的校验: IP数据报只需要对数据头进行校验,步骤如下: 将接收到的数据的checksum字段设置为0 把需要校验的字段的所有位划分为16位(2字节)的字 把所有16位的字相加,如果遇到进位, ...
- SOCKET,TCP/UDP,HTTP,FTP
(一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...
- [网络] SOCKET, TCP/UDP, HTTP, FTP
(一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...
- High Performance Browser Networking - TCP UDP TLS
延迟 定义和标准延迟 延迟简单地说,它是一种转移或信息包从起点到终点,所花费的时间. 延迟=发送延迟+传播延迟+处理延迟+排队延迟: Propagation delay 传播时延 传播时延这个概念.是 ...
随机推荐
- UC全屏
UC浏览器U3内核扩展接口定义
- Linux学习笔记7——linux中的静态库和动态库
一.静态库的编译 静态库的编译过程如下: 1.编译成目标文件 这里有一个可选项-static,调用格式:gcc -c -static 代码文件名.c 2.归档成静态库 A.归档的工具是ar工具,使用a ...
- unity5 人皮渲染 Skin Shading
换了一种方法,优化了一下代码,unity5效果很好,消耗不大 点开可查看大图 加入了次表面散射的阴影与自阴影 ------------by wolf96 wolf_crix ...
- 《University Calculus》-chape10-向量和空间几何学-叉积
叉积概念的引入: 在平面中我们为了度量一条直线的倾斜状态,为引入倾斜角这个概念.而通过在直角坐标系中建立tan α = k,我们实现了将几何关系和代数关系的衔接,这其实也是用计算机解决几何问题的一个核 ...
- spring中解析xml
解析xml有SAX,Stax,dom等方式,那么spring中是如何解析xml文件的呢? Document doc = this.documentLoader.loadDocument( inputS ...
- luajit 安装cjson
最近需要升级原有服务器的nginx加载逻辑,新的lua脚本需要解析一个远程返回的json格式的结果,原有的luajit并没有带cjson库,需要自己手动安装一下. 基本参考博客luajit安装cjso ...
- 用python正则表达式提取字符串
在日常工作中经常遇见在文本中提取特定位置字符串的需求.python的正则性能好,很适合做这类字符串的提取,这里讲一下提取的技巧,正则表达式的基础知识就不说了,有兴趣的可以看re的教程. 提取一般分两种 ...
- Linux进程通信之System V共享内存
前面已经介绍过了POSIX共享内存区,System V共享内存区在概念上类似POSIX共享内存区,POSIX共享内存区的使用是调用shm_open创建共享内存区后调用mmap进行内存区的映射,而Sys ...
- [置顶] Linux 流量控制
在如今的网络界,也许TC知道的人并不多了,这篇文章做留恋吧. 以前研究TC时记录下的讲解与配置文件. eth1:192.168.1.1,内网口 业务需求:保证正常的网页浏览,FTP,SMTP,POP ...
- linux 调度器配制参数
http://blog.csdn.net/wudongxu/article/details/8574753 参数位置: /proc/sys/kernel/ 编绎内核时参数 [root@monitor ...