关于TCP/IP必须知道的几个基础问题

转载自   关于TCP/IP必须知道的几个基础问题

描述一下TCP三次握手的过程

接下来我们根据下面这幅图来解释一下TCP三次握手。p.s: 每个箭头代表一次握手。


第一次握手

client(客户端)发送一个SYN(seq=x)包给server(服务器),然后“期待”server的ACK回复。p.s: seq为sequence(序列)的缩写,ACK为acknowledge(通知)的缩写。

第二次握手

  1. server(服务器)接收到SYN(seq=x)包后就返回一个ACK(ack=x+1)包,意思是告诉client(客户端):我已经成功接收到你的SYN包。

  2. 并且自己也发送一个SYN(seq=y)包,然后”期待“client(客户端)的ACK回复。

第三次握手

  1. client(客户端)接收到server(服务器)发回的ACK(ack=x+1)包后,然后就把自己的状态设置为ESTABLISHED(已建立连接)。

  2. 然后根据server(服务端)发来的SYN(seq=y)包,返回给”期待"中的server一个ACK(ack=y+1)包。期待中的server收到ACK回复,也把自己的状态设置为ESTABLISHED(已建立连接)。到此TCP三次握手完成,client与server可以正常进行通信了。


分析一下TCP四次挥手的整个过程


以上面这张图为例,我们来分析一下TCP四次挥手的过程。

第一次挥手

client(客户端)发送一个FIN(seq=x+2&&ack=y+1)包,此时client进入FIN_WAIT_1状态,这表明client已经没有数据要发送了。

第二次挥手

server(服务器)收到了client(客户端)发来的FIN(seq=x+2&&ack=y+1)包后,向client(客户端)发回一个ACK(ack=x+3)包,此时client进入FIN_WAIT_2状态,这表明server已经"同意"client的挥手请求。

第三次挥手

server(服务器)向client(客户端)发送FIN(seq=y+1)包,请求关闭连接,同时server进入LAST_ACK状态。

第四次挥手

client(客户端)收到server(服务器)发送的FIN(seq=y+1)包。然后向server发送ACK(ack=y+2)包,此时client进入TIME_WAIT状态。server收到client的ACK(ack=y+2)包以后,正式关闭连接;client等待一段时间还没有得到回复后判断server(服务器)已正常关闭,于是将自己的连接也正式关闭。

关于TCP滑窗/阻塞处理等问题,以后我会继续在这篇文章下面补充。

谈一下TCP/UDP的区别和优缺点

  1. TCP协议是可靠的而且面向连接,它可以保证信息到达的顺序,UDP和IP协议都是不可靠的协议。

  2. TCP面向字节流,UDP面向报文。

  3. TCP数据传输慢,UDP数据传输快成本低,早期的QQ就是采用的UDP。

说一下计算机之间通信的原理

计算机之间是通过ip和port(端口)来进行通信的,每一台计算都具有一个独立ip地址(在浏览器里面输入ip.cn就可以查看你独有的公网ip地址),和65535个port(端口)。计算机每一个通过网络通信的程序都占有一个独立的port,通过ip我们能确定要访问的计算机,而port(端口)帮助我们要和计算机上的哪一个程序通信。

p.s: 在linux/mac上我们可以通过netstat命令查看本机上哪些端口被占用了。比如在我的计算机上,MySQL占用了3306,Tomcat占用了8080,Nginx占用了80,DNS服务器占用了53,Shadowsocks占用了1080,Privoxy占用了8118。


谈一谈ip地址的分类


关于arp, ip header, tcp header, routing table等问题,以后我会继续在这篇文章下面补充。


说一说常见的服务以及它们对应的默认端口


TCP/UDP端口列表大全详见:

https://zh.wikipedia.org/zh-hans/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8。

描述一下在浏览器中输入url后的整个响应过程

下面我们以我们在浏览器中输入segmentfault.com为例子来讲解。

  1. 查找域名(segmentfault.com)对应的IP地址。在linux/mac下可以通过dig命令来查询。

  2. 浏览器根据查询到的IP地址向segmentfault服务器的80端口发送一个HTTP请求(request)

  3. 后台PHP接收到请求(request)后,发回一个网页。

  4. 浏览器收到回复后,解析返回的网页。

上面只是简要的描述,如果要详细展开的话在实在太大了。面试过程中,应该详细描述DNS解析域名的过程,对于浏览器发送的request和response的整个流程可以结合TCP/IP四层模型和OSI七层模型来展开,而对于服务器是如何处理请求的,可以根据网站采用的后台框架详细展开描述。

介绍一下TCP/IP四层模型和OSI七层模型




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

升讯威微信营销系统开发实践:(3)中控服务器的设计 .Net 还是 Java?

在上一篇文章中,简要介绍了升讯威微信营销系统的功能设计和架构设计,限于篇幅只能抛砖引玉,从本章节开始将围绕功能的设计和架构的设计进行详细的论述。 中控服务器的设计 在上文中,我们谈到需要一个中控服务器,用来维…

Java 虚拟机部分面试题

https://www.imooc.com/article/31018?block_idtuijian_wz https://www.imooc.com/article/31018?block_idtuijian_wz https://github.com/Snailclimb/Java_Guide https://github.com/Snailclimb/Java_Guide

linux 提取cpio_15. Linux提取RPM包文件(cpio命令)详解

在讲解如何从 RPM 包中提取文件之前,先来系统学习一下 cpio 命令。cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复制到归档包中。归档包,也可称为文…

升讯威微信营销系统开发实践:(2)功能设计与架构设计

在上一篇中,我们详细分析了微信订阅号和服务号的区别,在本篇中,将进入正题:升讯威微信营销系统的功能设计及架构设计。 一、功能设计 1)设计目标 ◇ 为微信服务号提供运营及管理所需的各种功能,包括微官网、…

解读分库分表中间件Sharding-JDBC

转载自 解读分库分表中间件Sharding-JDBC编者按】数据库分库分表从互联网时代开启至今,一直是热门话题。在NoSQL横行的今天,关系型数据库凭借其稳定、查询灵活、兼容等特性,仍被大多数公司作为首选数据库。因此,合理采用分库分表…

java面试设计模式

https://blog.csdn.net/yinyuehepijiu/article/details/38663843

新闻发布项目——实体类(User)

package bdqn.newsMange.entity; /*** User的实体类* author Administrator**/ public class User {private int userId;//编号private String userName;//用户名private String userPassword;//密码private String uRole;//角色public int getUserId() {return userId;}public…

js webpack 配置路径_webpack中如何设置html引入js的路径

如题所示,如果webpack这样配置var htmlWebpackPlugin require(html-webpack-plugin);const CleanWebpackPlugin require(clean-webpack-plugin);let pathsToClean [dist,];module.exports {entry: ./src/app.js,output: {path: __dirname /dist,filename: main.[chunkhash…

HTTP 报文结构

https://www.jianshu.com/p/a2c4ede32d11

Java魔法堂:URI、URL(含URL Protocol Handler)和URN

转载自 Java魔法堂:URI、URL(含URL Protocol Handler)和URN一、前言                              过去一直搞不清什么是URI什么是URL,现在是时候好好弄清楚它们了!本文作为学习笔记…

升讯威微信营销系统开发教程:(1)订阅号和服务号深入分析

微信开发系列教程,将以一个实际的微信平台项目为案例,深入浅出的讲解微信开发、应用各环节的实现方案和技术细节。 原创内容,欢迎转载,转载请注明出处。 首先在第1章节中,我们先理清什么是订阅号,什么又是服…

不安装cudnn可不可以_Linux非root用户如何优雅的安装cuda和cudnn

Linux非root用户如何优雅的安装cuda和cudnn发布时间:2018-05-23 16:11,浏览次数:804, 标签:LinuxrootcudacudnnLinux非root用户如何优雅的安装cuda和cudnn跑深度学习模型时,总会遇到各种版本的问题。如深度学习框架与cuda的版本不…

如果你也会C#,那不妨了解下F#(4):了解函数及常用函数

函数式编程其实就是按照数学上的函数运算思想来实现计算机上的运算。虽然我们不需要深入了解数学函数的知识,但应该清楚函数式编程的基础是来自于数学。 例如数学函数f(x) x^2x,并没有指定返回值的类型,在数学函数中并不需要关心数值类型和返…

新闻发布项目——实体类(newsTb)

package bdqn.newsMange.entity;import java.util.Date;/*** 新闻的实体类* author Administrator**/ public class newsTb {private int newsID;// 编号private int categoryID;//类别编号(外键)private String summary;// 摘要private String title;//题目private String con…

Java URL协议扩展实现

转载自 Java URL协议扩展实现在信息交互系统设计中,不乏有自定义通讯协议设计。本章会介绍如何利用 java.net.URL 类来自定义协议。一般而言, URL 的格式是: protocol://[authority]hostname:port/resource?queryString 。 URL 类能够解析…

axure8 事件改变样式_AxureRP8实战手册-案例2(文本框:边框变色)

案例2. 文本框:边框变色案例来源:百度-登录界面案例效果:光标进入文本框时:(图1-6)案例描述:在登录界面中,包含用户名与密码的输入框。当焦点进入输入框时,输入框边框与内部图标变为蓝色;失去…

URL的getFile()和getPath()方法的区别

转载自 URL的getFile()和getPath()方法的区别 import java.net.MalformedURLException; import java.net.URL; public class dd { /** * param args */ public static void main(String[] args) { try { URL url new URL("file://ftp.yoyodyne.com/pub/files/fo…

webpack打包发布

npm run dev npm run dist --线上 git status git add . git commit -am "online adapter" git push git pull git branch --查看当前分支是在哪里master 还是 admin yarn install v1.3.2 yarn run dist -- 打包 fe-deply.sh --shell脚本 自动发布脚本 gi…

介绍开源的.net通信框架NetworkComms

Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地址是:https://github.com/MarcFletcher/NetworkComms.Net networkcomms通讯框架使用简单方便,性能稳定. 从github上下载到源码后,需要Visual studio安装nuget 加载相关D…

dplayer js控制 自动全屏_vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】...

最近公司的产品上线,一些高级功能在基础版本中不对用户开发,通过视频的形式展示。产品开发用的是 vue, 经同事介绍使用了vue-video-player视频播放插件,通过 demo案例很快实现了视频播放效果class"vjs-custom-skin"ref"videoP…