网络编程

TCP与UDP有什么区别?

  1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
  2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
  4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
  5. TCP首部开销20字节;UDP的首部开销小,只有8个字节
  6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

简单介绍一下TCP三次握手与四次分手过程?

TCP用三次握手(three-way handshake)过程创建一个连接,使用四次分手 关闭一个连接。

三次握手与四次分手的流程如下所示:

三次握手

  • 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
  • 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。 完成了三次握手,客户端和服务器端就可以开始传送数据。以上就是TCP三次握手的总体介绍。

四次分手

  • 第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
  • 第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;
  • 第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;
  • 第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

三次握手与四次分手也是个老生常谈的概念,举个简单的例子说明一下。

三次握手

例如你小时候出去玩,经常玩忘了回家吃饭。你妈妈也经常过来喊你。如果你没有走远,在门口的小土堆上玩泥巴,你妈妈会喊:"小新,回家吃饭了"。你听到后会回应:"知道了,一会就回去"。妈妈听 到你的回应后又说:"快点回来,饭要凉了"。这样你妈妈和你就完成了三次握手的过程。

Android网络编程面试题集相关推荐

  1. android 网络编程面试题,Android面试题整理

    Android方面: 3.内存优化(内存泄漏.内存溢出),如何查找内存泄漏,如何优化 内存泄露:是指程序在申请内存后,无法释放本应该被回收的内存.内存泄露的堆积就会导致内存溢出. 内存溢出:是指程序在 ...

  2. 基于Http协议的Android网络编程

    之前写过一篇Android网络编程<浅谈android网络编程>,随着了解了更多Android知识,我意识到HttpClient已经不推荐使用了,更是在Android 6.0中被废弃了,原 ...

  3. Android网络编程系列 一 Socket抽象层

    在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽象 ...

  4. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  5. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  6. 【Android】Android网络编程概述

    Android网络编程概述 原文来自:http://blog.csdn.net/kieven2008/article/details/8210737 首先,应该了解的几个问题: 1)Android平台 ...

  7. Android网络编程http派/申请服务

    最近的研究Android网络编程知识,这里有一些想法,今晚学习.与您分享. 在实际的应用程序的开发非常需要时间appserver请求数据,那么app怎样发送请求呢?以下的代码就是当中的一种情况.使用H ...

  8. Android网络编程(八) 之 HttpURLConnection原理分析

    1 使用回顾 我们在前面博文<Android网络编程(四) 之 HttpClient与HttpURLConnection>中已经对HttpURLConnection的使用进行过介绍.今天我 ...

  9. Socket网络编程面试题

    Socket网络编程面试题 1.TCP和UDP的区别: 2.流量控制和拥塞控制的实现机制: 3.重传机制: 4.滑动窗口机制: 5.多线程如何同步: 6.进程和线程的区别: 7.进程间通讯的方式有哪些 ...

最新文章

  1. IOS block 教程
  2. Python技术分享:深入理解ThreadLocal变量的功能和使用
  3. 7-42 行编辑器 (10 分)
  4. 如何使用组策略提升Windows系统性能
  5. Vue实现省市区信息选择(附前端源码)
  6. android能播放4k视频格式,四平台六款手机4K视频播放实测
  7. win环境sftp软件_Windows环境下使用bitvise架构sftp服务器
  8. 数字孪生中的人工智能——技术现状、挑战和未来研究课题
  9. 指定服务器不存在或访问被拒绝访问,SQL Server不存在或访问被拒绝怎么办
  10. 主动学习与自监督学习结合的方法(Active Learning+Self-Supervision)
  11. 餐厅预订系统如何选?餐厅预订系统推荐
  12. php+矩阵,PHP实现简单矩阵算法
  13. Software Testing - UI自动化测试常用设计模式之工厂(Java)
  14. 网站流量统计分析系统-01
  15. 集合竞价与连续竞价01
  16. 三十二楼层选几层最好_一般买房买几楼比较好 1一32高楼层选最佳楼层
  17. 【期权课堂】第4课 期权的内在价值和时间价值(网格交易之家)
  18. 线切割泡沫的产生用线切割工作液消泡剂到底有那些效果
  19. 第一章_Android入门
  20. UML2面向对象分析与设计(第2版) 谭火彬 期末复习整理+部分答案【超实用】

热门文章

  1. java argument是什么_第2期:argument、parameter以及option有什么区别?
  2. Day6 python对文件的操作——百度飞桨领航团零基础Python入门
  3. 微信内部浏览器打开网页时提示外部浏览器打开遮罩升级版
  4. 【vue】滚动条自动滚动到底部
  5. 深入理解JVM虚拟机之垃圾回收
  6. JAVA商城项目(微服务框架)——第7天nginx+cors解决跨域+品牌+分类查询
  7. Linux学习笔记--鸟哥的Linux私房菜(全)
  8. 解决“无法停止‘通用卷’设备的方法
  9. 联邦学习 深度学习对抗攻击
  10. Python全栈开发【模块】