三次握手

传输层

别等时光非礼了梦想. 提交于 2020-01-16 16:27:37
一、OSI和DoD模型 传输层最大数据包是65535字节,而网络层数据最大只有1480字节。所以需要分段,但是只要分段,就有可能丢包,因为网络层不负责可靠传输。所以要求服务器和客户端保持会话,直到数据传输完成。 二、传输层协议和应用层协议的关系 (1)TCP和UDP协议和不同的端口即可对应一个应用层的协议。 (2)熟知数值一般为0-1023,登记端口号数值1024-49151,客户端口号数值为49152-65535. (3)常用的应用层协议使用的端口(号): http = TCP + 80 Https = TCP + 443 RDP = TCP + 3389 ftp = TCP + 21 共享文件夹 = TCP + 445 SMTP = TCP + 25 POP3 = TCP + 110 telnet = TCP + 23 SQL = TCP + 1433 DNS = UDP + 53 三、TCP协议与UDP协议 1.TCP(Transmission Control Protocol)传输控制协议 应用场景:需要将要传输的文件分段传输时;就需要TCP协议来建立会话实现可靠传输;同时也有流量控制功能。(例如QQ传文件) 查看会话 netstat -n 查看建立会话的进程 netstat -nb 2.UDP(User Data Protocol)用户数据报协议 应用场景

计算机网络常见面试题

混江龙づ霸主 提交于 2020-01-16 16:06:08
一 OSI与TCP/IP各层的结构与功能,都有哪些协议? 小说网 m.198200.com 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 结合互联网的情况,自上而下地,非常简要的介绍一下各层的作用。 1.1 应用层 应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文。 域名系统 域名系统(Domain Name System缩写 DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。(百度百科)例如:一个公司的 Web 网站可看作是它在网上的门户,而域名就相当于其门牌地址,通常域名都使用该公司的名称或简称。例如上面提到的微软公司的域名,类似的还有:IBM 公司的域名是 www.ibm.com、Oracle 公司的域名是 www.oracle.com

Java基础(19)——网络编程

拥有回忆 提交于 2020-01-16 15:08:02
目录 第一章 网络编程入门 1.1软件结构 1.2 网络通信协议 1.3 协议分类 1.4 网络编程三要素 协议 IP地址 端口号 第二章 TCP通信程序 2.1 概述 2.2 Socket类 构造方法 成员方法 2.3 ServerSocket类 构造方法 成员方法 2.4 简单的TCP网络程序 TCP通信分析图解 客户端向服务器发送数据 服务器向客户端回写数据 第三章 综合案例 3.1 文件上传案例 文件上传分析图解 基本实现 文件上传优化分析 优化实现 信息回写分析图解 回写实现 3.2 模拟B\S服务器(扩展知识点) 案例分析 案例实现 访问效果 第一章 网络编程入门 1.1软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 两种架构各有优势,但是无论哪种架构,都离不开网络的支持。 网络编程 ,就是在一定的协议下,实现两台计算机的通信的程序。 1.2 网络通信协议 **网络通信协议:**通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议

通讯协议

倖福魔咒の 提交于 2020-01-16 05:11:01
最近半年都是在对接协议,可能是心态问题,这个协议真的是不想看,一大串的数字,乱七八糟的文档,无从下手的项目; 还好,最终的结果是需要接入的都接入了,什么国标,企标,tcp,udp,mqttt。 好久就想写一片文章来总结下,协议,到底是个什么鬼东西! 百度百科: 协议 :* 网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。* 中间几个关键词,共同遵守,约定。通俗的来讲就是规则,斗地主的规则,麻将的规则,国标就是国家规定的打麻将的规则,企标就是企业规定的打麻将的规则。一起打麻将的人要一起遵守,才有的玩,要是有人不认。估计得挨揍。 网络层协议,tcp udp, 应用层协议,http,ftp 这里所说的网络层和应用层来自于计算机网络的五层协议: 除去下面的链路层和物理层,tcp 和 udp 应该属于应用协议的最底层了。而 http 和 ftp 这些协议都是基于 tcp 和 udp 的封装的应用层协议; TCP :首先,tcp 是一种可靠的协议,很多人都听过三次握手,什么是三次握手,上图 这里面可靠性的点就是这个 ack(消息应答)多了一次应答,所以多了两次连接,总共三次动作,成为三次握手。 四次挥手 假设 Client 端发起中断连接请求,也就是发送 FIN

signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);

感情迁移 提交于 2020-01-16 03:52:59
** signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN); signal(SIGCHLD, SIG_IGN); 因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源。如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给init进程去处理,省去了大量僵尸进程占用系统资源。(Linux Only) 对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将 SIGCHLD信号的操作设为SIG_IGN。 signal(SIGPIPE, SIG_IGN); TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协议的语义, 表示对端只是关闭了其所负责的那一条单工信道, 仍然可以继续接收数据. 也就是说, 因为TCP协议的限制, 一个端点无法获知对端的socket是调用了close还是shutdown. 对一个已经收到FIN包的socket调用read方法, 如果接收缓冲已空, 则返回0,

TCP协议报文分析

拥有回忆 提交于 2020-01-16 02:37:56
众所周知TCP是面向连接的字节流传输,但是虽然是面向字节流,但是传送单元还是报文段。报文段分为首部和数据两个部分,其中首部是用来存放各种控制信息,对首部进行分析能更好的掌握TCP。 先放一个TCP报文的格式图 TCP协议报文段 各字段分析 源端口和目的端口,都是16位,用来存放源端口和目的端口。 序号,占4个字节,范围是0-2 32 -1,因为TCP面向的是字节流,所以每个字节都对应一个序号,这里的序号指的是发送数据部分的第一个字节的序号。 确认号,占4个字节,表示的是期望收到对方下一个报文段等额第一个数据字节的序号,也就是对方下一数据发送的序号,通过确认号可以告知对方自己收到的数据的数量,如果数量与发送的不符合就会进行重发,这也是TCP的可靠传输数据的主要方式。 数据偏移,占4位,他指出TCP报文的头部起始位置到数据其实位置的距离,实际上就是TCP报文头部的大小,单位是32位,也就是4字节,这点和IP协议中的首部长度类似。 保留,目前设置为全0,为以后使用。 URG,占1位,连同下面的五位都是标志位,URG置1表示对方有紧急数据要传送,要紧急数据其放在本报文段的最前面,而为了配合紧急数据的使用,后面还有个紧急指针,待会在做介绍。 ACK,ACK置1之后才表示确认号有效,因为TCP是面向连接,所以在连接完成之前是不能进行数据传输的,只有在连接完成,ACK置1之后数据才能收发。

TCP详解——连接建立与断开

醉酒当歌 提交于 2020-01-16 02:37:24
一、报文结构介绍   在开始讲TCP连接过程时,还是先看看TCP报文的格式如图1所示。IP数据报此时由IP头部+TCP头部+TCP数据组成。不带选项的TCP头部是20字节长,而带选项的,TCP头部最长可达60字节。常见的选项包括最大的大小(MSS),时间戳(传输控制时使用)、窗口缩放(流量控制时使用)、选择性ACK(传输控制时使用)。我们来具体看下TCP头部字段如图2所示。 图1 IP数据报中TCP封装   图2所示的即是TCP头部的详细结构。源端口与目的端口和源IP及目的IP这四元组唯一标识每个TCP连接。序列号(Sequence Number)字段标识TCP的一端到另一端的数据流的第一个开始字节(例如发送端发送的数据总字节长度为1000字节,假定序列号从1开始,总的序列号是1-1000,TCP会给每个字节赋予一个序列号)。通过序列号来代表发送端到接收端的数据,接收端接收到数据后,即可通过确认号(ACK)来发送给发送端,让发送端知道数据已被接受。这个ACK号是由接收到的数据的序列号加1,代表接收端希望接收的下一个数据的序列号。(注:ACK是不占用序列号的,原因是接收端发送ACK给发送端后,发送端的ISN是等于此时接收到的ACK号)。 图2 TCP头部结构   头部长度的单位32bit,所以这也定义了TCP的长度最大为4*15=60字节。八个标志位中(CWR、ECE。。。等)

UNP——第二章,TCP握手与挥手分析

痞子三分冷 提交于 2020-01-16 01:45:36
1.握手 说明:   下面涉及 FIN,SYN,ACK之类数据时,都是由TCP服务收发,   涉及 accept, listen 之类api,都是 应用进程 完成。   都统一使用 客户端,服务端描述,请自行分辨。 (1)首先描述下3次握手,TCP协议做了什么。 客户端,主动打开,发送自己的序列号SYNj,并期待对方回复ACKj+1 服务端,被动打开,接送自己的序列号SYNk和ACKj+1,并期待对方回复ACKk+1 客户端,接收对方ACK,己方打开完成,接收对方SYN,发送ACKk+1 服务端,接收对方ACK,己方打开完成。 分析下:   首先打开分为,被动打开和主动打开。   当接收到对方的ACK,则己方打开完成,则可以使用socket进行读写操作,但并不保证正常。 (2)结合 系统调用分析三次握手 客户端,listen,进行被动打开 服务端,connect ,进行主动打开,发送SYNj(如果乙方此时没有listen 完成,则connect 失败) 客户端,回复SYNk + ACKj+1, 应用层无任何变化。 服务端,收到 ACKj+1 + SYNk,并回复 ACKk+1, 甲方打开完成,connect 返回。 客户端,收到ACKj+1,可以进行 read,write。 服务端,accept,如果乙方没有收到 SYNj 则会阻塞,否则返回 服务端,收到ACKk+1,可以进行

关于FIN_WAIT2

左心房为你撑大大i 提交于 2020-01-16 00:10:40
FIN_WAIT2问题 让我们热热身,通过一张旧图来回忆一下 TCP 关闭连接时的情况: TCP Close 按照正常的状态迁移路径,当 FIN_WAIT2 收到 FIN 包后会迁移到 TIME_WAIT 状态。如果没有收到 FIN 包,那么连接状态会如何迁移,我们不妨测试一下: #!/usr/bin/env python import socket import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('127.0.0.1', 1234)) s.listen(1) c, _ = s.accept() time.sleep(1000) c.close() 如上是用 Python 实现的一个简单的 server 演示代码,需要注意的是我在 close 前设置了一个巨大的延迟时间,从而达到拖延服务端发出 FIN 包的目的。与之相对应的我们再实现一个简单的 client 演示代码,它没什么可说的,就是连上后直接关闭: #!/usr/bin/env python import socket import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('127.0.0.1', 1234)) s.close(

TCP和UDP优缺点以及使用场景

老子叫甜甜 提交于 2020-01-15 15:07:47
TCP TCP全称为Transmission Control Protocol(传输控制协议),是一种可靠的面向连接传输协议,同时它也是一种client-server模式的协议,因为是可靠的传输协议,所以它比UDP要复杂的多 TCP的主要特点: TCP是面向连接的传输协议; 每一条TCP有且只有两个端点,为一对一关系; TCP提供可靠交互的服务; TCP提供全双工通信,全双工为即可传输又可接收; TCP是面向字节流的。 优点:可靠、稳定 TCP的可靠体现在TCP在传输数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完之后,还会断开连接用来节约系统资源 缺点:慢,效率低,占用系统资源高,易被攻击 在传递数据之前要先建立连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞机制等都会消耗大量时间,而且要在每台设备上维护所有的传输连接。然而,每个链接都会占用系统的CPU、内存等硬件资源。因为TCP有确认机制、三次握手机制,这些也导致TCP容易被利用,实现DOS、DDOS、CC等攻击 UDP UDP的全称是User Date Protocal,翻译成中文是用户数据包协议,它是一种不可靠的传输协议,一般情况下一个数据包(大概64K)能完成的数据通讯使用UDP协议,比如请求DNS解析IP地址使用的就是UDP协议