tcp协议

Netty题目总结

蓝咒 提交于 2020-03-17 08:59:05
1.BIO、NIO 和 AIO 的区别? BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线 程开销大。 伪异步 IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。 NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用 器轮询到连接有 I/O 请求时才启动一个线程进行处理。 AIO:一个有效请求一个线程,客户端的 I/O 请求都是由 OS 先完成了再通知服务器应用去 启动线程进行处理, BIO 是面向流的,NIO 是面向缓冲区的;BIO 的各种流是阻塞的。而 NIO 是非阻塞的;BIO 的 Stream 是单向的,而 NIO 的 channel 是双向的。 NIO的特点:事件驱动模型、单线程处理多任务、非阻塞 I/O,I/O 读写不再阻塞,而是返 回 0、基于 block 的传输比基于流的传输更高效、更高级的 IO 函数 zero-copy、IO 多路复用 大大提高了 Java 网络应用的可伸缩性和实用性。基于 Reactor 线程模型。 在 Reactor 模式中,事件分发器等待某个事件或者可应用或个操作的状态发生,事件分发 器就把这个事件传给事先注册的事件处理函数或者回调函数,由后者来做实际的读写操 作。如在 Reactor 中实现读:注册读就绪事件和相应的事件处理器、事件分发器等待事 件、事件到来

TCP协议,DNS的诞生

﹥>﹥吖頭↗ 提交于 2020-03-17 05:56:45
在通信的过程中,TCP协议处于传输层,这里进行传输可靠的字节流服务。 什么是字节流服务:就是将很大的数据进行分割成以报文为单位的数据包。可靠是指能够将数据准确的传输给对对方。 如何确保准确送达:TCP进行三次握手。握手过程中使用了TCP标志-SYN和ACK。 DNS:为什么不直接使用ip地址进行访问,因为相比较一串纯数字,人类的大脑更加适合记住字母配合数字。所以DNS就是为了让计算机能够将人类编写的域名转译成计算机能够看懂的一串纯数字。 来源: CSDN 作者: 前端xu 链接: https://blog.csdn.net/weixin_40180205/article/details/104873771

很全的linux网络编程技巧

我只是一个虾纸丫 提交于 2020-03-17 03:51:39
1. LINUX 网络编程基础知识 1 1.1. TCP/IP 协议概述 1 1.2. OSI 参考模型及 TCP/IP 参考模型 1 1.3. TCP 协议 3 1.4. UDP 协议 5 1.5. 协议的选择 6 2. 网络相关概念 6 2.1. socket 概念 7 2.2. socket 类型 8 2.3. socket 信息数据结构 8 2.4. 数据存储优先顺序的转换 8 2.5. 地址格式转化 9 2.6. 名字地址转化 10 3. socket 编程 13 3.1. 使用 TCP 协议的流程图 13 3.2. 使用 UDP 协议的流程图 24 3.3. 设置套接口的选项 setsockopt 的用法 31 3.4. 单播、广播、组播(多播) 32 1. LINUX 网络编程基础知识 1.1. TCP/IP 协议概述 协议 protocol:通信双方必须遵循的规矩 由iso规定 rpc文档 osi参考模型:(应-表-会-传-网-数-物) è 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 tcp/ip模型4层: 应用层 {http超文本传输协议 ftp文件传输协议 telnet远程登录 ssh安全外壳协议 stmp简单邮件发送 pop3收邮件} 传输层 {tcp传输控制协议,udp用户数据包协议} 网络层 {ip网际互联协议 icmp网络控制消息协议

面试官,求求你,别再问我网络分层了!!!

不打扰是莪最后的温柔 提交于 2020-03-17 03:25:17
上一篇大体给小伙伴介绍一下网络分层的基本概念,以及每层的大体的功能,那么今天我们来看看每层具体的功能是什么?层与层之间又是怎么进行封装关联的? 上一篇: 面试:你真的懂网络分层模型吗?(上) 写在前边 上一篇主要分享了网络分层的基本概念,为什么要进行网络分层?又是如何进行分层?每一层的基本功能是什么?而且对于每一层的的功能细节方面,比如数据包的组成以及每层包含的一些协议的使用都没有细说,那么这一篇文章将会分享网络分层每层中协议等深入讲解。(PS:可能里边有的讲解不正确,还请大佬指出改正) 1、物理层 物理层里边涉及到最多的是硬件底层的一些内容,没有需要过多了解的内容,我们直接看数据链路层。 2、数据链路层 上回讲到数据链路层中规定的“以太网协议”来规定电信号的分组形式,什么是以太网,以太网的数据包是什么样子的? 2.1 以太网协议 以太网规定,每组的电信号就是一个数据包,每个数据包我们可以成为“帧”。每帧的组成是由标头(Head)和数据(Data)组成。 那么你会问,标头里有什么信息?Data 数据又会存放写什么?为什么分为两部分?放在一块不好吗? 1、标头 为什么传输数据会有标头,我们想呀,在传输数据的时候,接收端怎么判断是不是给自己发送的,那么就只取出标头来进行判断。 数据包的标头中通常会存放一些有关数据包的说明、发送者是谁、接受者又是谁等相关识别信息。 标头的长度固定为 18

TCP/IP协议分析

你说的曾经没有我的故事 提交于 2020-03-17 02:11:22
文章目录 TCP/IP参考模型 应用层 主机到主机层 因特网层 利用TCP/IP参考模型分析数据传输过程 可靠的TCP TCP概述 TCP报文结构 主机到主机层 TCP三次握手 TCP四次挥手 滑动窗口机制 停止等待协议 拥塞控制 冒险的UDP UDP概述 UDP报文结构 TCP/IP参考模型 应用层 HTTP 80 超文本传输协议,提供浏览网页服务 Telnet 23 远程登陆协议,提供远程管理服务 FTP 20、21 文件传输协议,剔红互联网文件资源共享服务 SMTP 25 简单邮件传输协议,提供互联网电子邮件服务 POP3 110 邮局协议,提供互联网电子邮件服务 TFTP 69(UDP)简单文件传输协议,提供简单的文件传输服务 主机到主机层 TCP UDP TCP与UDP的对比 传输控制协议(TCP) 用户数据报协议(UDP) 面向字节流 面向报文 面向链接 无连接 可靠传输 尽力而为的传输 支持流控及窗口机制 无流控及窗口机制 HTTP、FTP等 TFTP、DNS、DHCP等 因特网层 负责将ip报文从源端发送到目的端 定义逻辑地址(IP地址) 负责数据包的寻径和转发 IP包 首部长度一般为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。数据负载部分的长度一般可变,整个IP数据包的最大长度为65535B。 利用TCP

OSI参考模型与TCP/IP协议

帅比萌擦擦* 提交于 2020-03-16 08:46:19
OSI的7层参考模型由低到高分别为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。如下图: TCP/IP(传输控制协议/网际协议)分为4层:网络接口层、网络互连层、传输层、应用层。如图: OSI参考模型与TCP/IP之间的关系如图: 来源: 51CTO 作者: wx5e6de0bb1490b 链接: https://blog.51cto.com/14755533/2478628

TCP的三次握手与四次挥手总结(详解+动图) 面试准备

纵饮孤独 提交于 2020-03-15 19:04:42
背景描述 我们知道网络层,可以实现两个主机之间的通信。但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据。IP协议虽然能把数据报文送到目的主机, 但是并没有交付给主机的具体应用进程 。而 端到端的通信 才应该是应用进程之间的通信。 UDP,在传送数据前不需要先建立连接,远地的主机在收到UDP报文后也不需要给出任何确认。虽然UDP不提供可靠交付,但是正是因为这样,省去和很多的开销,使得它的速度比较快,比如一些对实时性要求较高的服务,就常常使用的是UDP。对应的应用层的协议主要有 DNS,TFTP,DHCP,SNMP,NFS 等。 TCP,提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。因此TCP是一种可靠的的运输服务,但是正因为这样,不可避免的增加了许多的开销,比如确认,流量控制等。对应的应用层的协议主要有 SMTP,TELNET,HTTP,FTP 等。 常用的熟知端口号 应用程序 FTP TFTP TELNET SMTP DNS HTTP SSH MYSQL 熟知端口 21,20 69 23 25 53 80 22 3306 传输层协议 TCP UDP TCP TCP UDP TCP TCP的概述 TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种断点我们叫作套接字

(1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制

耗尽温柔 提交于 2020-03-15 16:09:15
1.基于tcp协议的编程模型(重中之重) 1.1 编程模型 服务器: (1)创建ServerSocket类型的对象,并提供端口号; (2)等待客户端的连接请求,调用accept()方法; (3)使用输入输出流进行通信; (4)关闭Socket并释放有关的资源; 客户端: (1)创建Socket类型的对象,并提供服务器的IP地址和端口号; (2)使用输入输出流进行通信; (3)关闭Socket并释放有关的资源; 1.2 相关类和方法的解析 (1)ServerSocket类 java.net.ServerSocket类主要用于描述服务器的套接字(大插排)。 ServerSocket(int port) - 根据参数指定的端口号来构造对象。 Socket accept() - 侦听并接受到此套接字的连接请求。 void close() - 关闭套接字。 (2)Socket类 java.net.Socket类用于描述客户端的套接字,该套接字是两台机器间通信的端点。 Socket(String host, int port) - 根据参数指定的主机名和端口号来构造对象。 InputStream getInputStream() - 用于获取当前Socket的输入流。 OutputStream getOutputStream() - 用于获取当前Socket的输出流。 void close()

TCP的三次握手和四次挥手

无人久伴 提交于 2020-03-15 12:59:18
今天去面试围绕RPC组件这一块被询问到了TCP的连接机制,脑子仅存在大学里的一点记忆,于是回来整理一番,先看个例子 三次握手: A:“喂,你听得到吗?”A->SYN_SEND B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED A:“我能听到你,今天balabala……”B->ESTABLISHED 四次挥手: A:“喂,我不说了。”A->FIN_WAIT1 B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2 B:”好了,说完了,我也不说了。”B->LAST_ACK A:”我知道了。”A->TIME_WAIT | B->CLOSED A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态。不断检测是否有客户进程发起连续请求,如有,作出响应。设客户进程运行在主机A中,他先向自己的TCP发出主动打开的命令,表明要向某个IP地址的某个端口建立运输连接,过程如下: 1)主机A的TCP向主机B的TCP发出连接请求报文段,其首部中的同步比特SYN应置1,同时选择一个序号x,表明在后面传送数据时的第一个数据字节的序号是x。

为何TCP采用随机序列号

五迷三道 提交于 2020-03-15 10:39:04
为何TCP采用随机序列号 TCP采用随机序列号,主要是基于如下两个原因: 防止接受网络上粘滞的TCP包,如果都从0开始的话,极其容易接受之前断开连接发送的 粘滞包 。虽然可以采用每次TCP会话都使用一个UUID作为标记,但是考虑到每次都要携带UUID,比较浪费流量,所以就采用随机序列号的方法。 防止Hack猜测序列号,然后伪装TCP报文,当然这种防御其实很弱。 TCP总的来说,提供了一种可靠的流数据传输方式,但是还是有各种坑。比如说,超时检测,粘包,安全性等问题。 在一定程度上,可以把TCP连接,看成能保证从FIRST_ACK到LAST_ACK的流协议 来源: oschina 链接: https://my.oschina.net/u/1999248/blog/620885