三次握手

ISO/OSI模型

不羁岁月 提交于 2020-01-25 00:53:24
ISO七层模型由下至上为1至7层,分别为: 应用层(Application layer) 表示层(Presentation layer) 会话层(Session layer) 传输层(Transport layer) 网络层(Network layer) 数据链路层(Data link layer) 物理层(Physical layer) 其中上三层称之为高层,定义应用程序之间的通信和人机界面。什么意思呢,就是上三层负责把电脑能看懂的东西转化为你能看懂的东西,或把你能看懂的东西转化为电脑能看懂的东西。 下四层称之为底层,定义的是数据如何端到端的传输(end-to-end),物理规范以及数据与光电信号间的转换。 应用层,很简单,就是应用程序。这一层负责确定通信对象,并确保由足够的资源用于通信,这些当然都是想要通信的应用程序干的事情。 表示层,负责数据的编码、转化,确保应用层的正常工作。这一层,是将我们看到的界面与二进制间互相转化的地方,就是我们的语言与机器语言间的转化。数据的压缩、解压,加密、解密都发生在这一层。这一层根据不同的应用目的将数据处理为不同的格式,表现出来就是我们看到的各种各样的文件扩展名。 会话层,负责建立、维护、控制会话,区分不同的会话,以及提供单工(Simplex)、半双工(Half duplex)、全双工(Full duplex)三种通信模式的服务

OSI模型与TCP/IP模型

感情迁移 提交于 2020-01-24 22:44:53
一、OSI七层参考模型 OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互联为网络的标准框架,简称OSI。 OSI将计算机网络体系结构换分为以下七层: 1、物理层 物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。在该层,数据的单位称为比特(bit)。属于物理层定义的典型规范代表包括:EIA/TIARS-232、EIA/TIARS-449、RJ-45等。 2、数据链路层 数据链路层实现了在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理寻址、数据的成帧、流量控制、数据的检错、重发等。在这一层,数据的单位称为帧(frame)。该层协议的代表包括:HDLC、PPP、STP、帧中继等。(物理寻址–固定、硬件 核心功能:介质访问控制、控制物理层) 3、网络层 网络层负责对子网间的数据包进行路由选择,还可以实现拥塞控制、网际互联等。在这一层,数据的单位称为数据包(packet)。网络层协议的代表包括:IP、RIP、OSPF、ARP、RARP、ICMP等。(逻辑寻址–临时、范围) 4、传输层 传输层时第一个主机到主机的层次。传输层负责将上层数据分段并提供端到端的

TCP连接的建立--connect函数

走远了吗. 提交于 2020-01-24 21:38:46
众所周知,TCP是面向连接的协议,我在前面的文章中也有写到过三次握手的过程 有兴趣的可以看一看 tcp三次握手和四次挥手 今天就来看一看socket编程中关于三次握手建立连接的函数–connect 我们在这里还是把建立连接的一方抽象为客户端,接收连接的抽象成服务端 函数原型 # include <sys/socket.h> int connect ( int sockfd , const struct sockaddr * servaddr , socklen_t addrlen ) ; sockfd:socket函数返回的套接字描述符,用来通信。 servaddr:指向服务端套接字地址结构的指针,为了实现通用性,将其转换成sockaddr*的类型 addrlen:表示套接字地址结构的大小 成功返回0,失败返回-1,并设置errno 分析函数失败的几种原因 在分析演示之前先使用ifconfig查看我当前电脑的ip地址 然后我正常连接是可以正常进行通信的(服务器是简单的回射服务器,127.0表示连接本机) 当客户发出报文但是没有收到回应的时候,比如三次握手中发送SYN分节,但是由于一些原因服务端没有收到,这个时候在等待6s后客户端重发,一直到75s后仍然没有相应,则会返回错误,并设置errno为 ETIMEDOUT 。 我们用客户端连接一个不存在局域网中的网络作为测试:

TCP和UDP的一些优缺点和区别

烈酒焚心 提交于 2020-01-24 18:23:49
技术博客: https://github.com/yongxinz/tech-blog 同时,也欢迎关注我的微信公众号 AlwaysBeta ,更多精彩内容等你来。 TCP 的优点: 可靠,稳定。 TCP 的可靠体现在 TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP 的缺点: 慢,效率低,占用系统资源高,易被攻击。 TCP 在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的 CPU、内存等硬件资源。 而且,因为 TCP 有确认机制、三次握手机制,这些也导致 TCP 容易被人利用,实现 DOS、DDOS、CC 等攻击。 UDP 的优点: 快,比 TCP 稍安全。 UDP 没有 TCP 的握手、确认、窗口、重传、拥塞控制等机制,UDP 是一个无状态的传输协议,所以它在传递数据时非常快。没有 TCP 的这些机制,UDP 较 TCP 被攻击者利用的漏洞就要少一些。但 UDP 也是无法避免攻击的,比如:UDP Flood 攻击。 UDP 的缺点: 不可靠,不稳定。 因为 UDP 没有 TCP 那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

理解TCP三次握手和四次挥手

不羁岁月 提交于 2020-01-24 16:56:31
TCP相关知识 TCP是面向连接的传输层协议,它提供可靠交付的、全双工的、面向字节流的点对点服务。HTTP协议便是基于TCP协议实现的。(虽然作为应用层协议,HTTP协议并没有明确要求必须使用TCP协议作为运输层协议,但是因为HTTP协议对可靠性的的要求,默认HTTP是基于TCP协议的。若是使用UDP这种不可靠的、尽最大努力交付的运传输层协议来实现HTTP的话,那么TCP协议的流量控制、可靠性保障机制等等功能就必须全部放到应用层来实现)而相比网络层更进一步,传输层着眼于应用进程间的通信,而不是网络层的主机间的通讯。我们常见的端口、套接字等概念就是由此而生。(端口代表主机上的一个应用进程、而套接字则是ip地址与端口号的合体,可以在网络范围内唯一确定一个应用进程)TCP协议的可靠传输是通过滑动窗口的方法实现的;拥塞控制则有着慢开始和拥塞避免、快重传和快恢复、RED随机早期检测几种办法。 TCP协议的报文格式 TCP报文段的首部分为 固定部分 和 选项部分 ,固定部分长20byte,而选项部分长度可变。(若整个首部长度不是4byte的整数倍的话,则需要用填充位来填充)在固定首部中,与本文密切相关的是以下几项: seq(序号):TCP连接字节流中每一个字节都会有一个编号,而本字段的值指的是本报文段所发送数据部分第一个字节的序号。 ack(确认号)

Java 网络编程

心不动则不痛 提交于 2020-01-24 16:24:13
网络编程 网络模型 OSI参考模型 //应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 TCP/IP参考模型 //应用层 传输层 网际层 网络接口层 网络通讯要素 IP地址 //网络中设备的标识 本地回环地址 127.0.0.1 主机名 localhost 端口号 //标识进程的逻辑地址 有效端口 0~65535 其中0~1024系统使用或保留端口 传输协议 //通讯的规则 TCP UDP UDP 将数据及源和目的 封装成数据包中 不需要建立连接 每个数据包的大小限制在64K内 因无连接 是不可靠协议 不需要建立连接 速度快 TCP 建立连接 形成传输数据的通道 在连接中进行大数据量传输 通过三次握手完成连接 是可靠协议 必须建立连接 效率会稍低 InetAddress //IP地址 getLocalHost //获取本地地址IP对象 getHostAddress //IP地址字符串 getHostName //IP主机名 public class IPDemo { public static void main(String[] args) throws UnknownHostException { //获取本地主机ip地址对象。 InetAddress ip = InetAddress.getLocalHost(); //获取其他主机的ip地址对象。 ip =

TCP的三次握手和四次挥手

允我心安 提交于 2020-01-24 07:39:02
这个简直是每次面试必问的一个知识点了,又三次握手四次挥手的过程能带出一大堆问题来,个个都能问得你猝不及防,什么第三次确认的必要性,什么time_wait的作用啦,什么主动关闭被动关闭啦,什么发送内容啦,等等等等。今天我们就来好好总结一下这整个的过程。 建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 先来看看如何建立连接的: 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。 那如何断开连接呢?简单的过程如下: 【注意】 中断连接端可以是Client端,也可以是Server端。 假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说" 我Client端没有数据要发给你了 ",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK," 告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息 "。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文," 告诉Client端,好了,我这边数据发完了

针对TCP连接异常断开的分析

最后都变了- 提交于 2020-01-24 04:43:44
我们知道,一个基于TCP/IP的客户端-服务器的程序中,正常情况下,我会是启动服务器使其在一个端口上监听请求,等待客户端的连接;通过TCP的三次握手,客户端能够通过socket建立一个到服务器的连接;然后,两者就可以基于这个socket连接通信了。连接结束后,客户端(进程)会退出;在不需要继续处理客户请求的情况下,服务器(进程)也将退出。而且,当一个进程退出的时候,内核会关闭所有由这个进程打开的套接字,这里将触发TCP的四次挥手进而关闭一个socket连接。但是,在一些异常的情况下,譬如:服务器进程终止、服务器主机奔溃/奔溃后重启、服务器关机的情况下,客户端向服务器发起请求的时候,将会发生什么呢?下边,我们来看看这几种情况。 注意:一下描述的各种情况所使用的示例程序在文章的最后贴出 一、服务器进程终止 我们启动客户/服务器对,然后杀死子进程(模拟服务器进程崩溃的情形,我们可从中查看客户端将发生什么)。 1:在同一个主机上启动服务器和客户,并在客户上输入一行文本,以验证一切正常。正常情况下,改行文本将由服务器回射给客户。 2:找到服务器子进程的ID,通过kill命令杀死它。作为进程终止处理的部分工作,子进程中所有打开着的描述字都被关闭。这就导致向客户发送一个FIN,而客户TCP则响应以一个ACK。这就是TCP连接终止的前一半工作。 3:子进程终止时

TCP三次握手和四次挥手及其状态变化

纵然是瞬间 提交于 2020-01-24 04:38:45
@[TOC] TCP三次握手和四次挥手 http://www.httpclient.cn/archives/142.html https://blog.csdn.net/hyg0811/article/details/102366854 三次握手 最初:client:Closed, server:Listen. 第一次握手:client 进入SYN_SENT状态,发送SYN报文,并带有初始化序列号ISN =x(Initial Sequtial Number, 或seq)。server收到客服端发来的报文后,进入SYN_RCVD状态。此时,server确认了client的发送能力OK. 第二次握手:server发送SYN-ACK报文应答客户端,Ack = x+1, 也带有自己的初始化序列号ISN = y。客户端收到后,进入连接ESTABLISHED状态。此时,client确认了server具有正常的接受和发送能力。 第三次握手:客户端发送ACK=y+1给服务端,服务端收到后,进入ESTABLISHED状态。此时,server确认了client具备正常的接受和发送能力。 注意 服务器端的资源分配是在二次握手时分配的。server收到SYN报文后, 会建立半连接队列,在一定时间后,如果server没有收到client的ack, 就会重传直至超时。很多DDOS攻击就是SYN攻击

计算机网络

走远了吗. 提交于 2020-01-23 16:22:23
计算机网络太难?了解这一篇就够了 【原文链接https://juejin.im/post/5d896cccf265da03bd055c87】 1、谈下你对五层网络协议体系结构的理解? 学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。 1. 应用层   应用层的任务是通过 应用进程 间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。 对于不同的网络应用需要不同的应用层协议 。、应用层交互的数据单元称为报文。 2. 运输层   运输层的主要任务就是负责向 两台主机进程 之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。    由于一台主机可同时运行多个线程,因此运输层有 复用 和 分用 的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。   运输层还要对收到的报文进行 差错检测 。在网络层,IP数据包首部中的检验和字段只检验首部是否出现差错而不检验数据部分。   运输层向高层屏蔽了下面网络核心的细节