精华内容
参与话题
问答
  • Linux_UDP协议和TCP协议

    2020-02-14 13:54:23
    传输层 负责数据能够从发送端传输到接收端。 端口号(Port)标识了一个主机上进行通信的不同的应用程序。 0~1023:知名端口号。如FTP(21)、SSH(22)、Telnet(23)、...在TCP/IP协议中,用"源IP“、“源端口号”、“...

    传输层

    负责数据能够从发送端传输到接收端。

    端口号(Port)标识了一个主机上进行通信的不同的应用程序。

    • 0~1023:知名端口号。如FTP(21)、SSH(22)、Telnet(23)、SMTP(25)、HTTP(80)、HTTPS(443)。查看知名端口号cat /etc/services
    • 1024~65535:操作系统动态分配端口号。

    在TCP/IP协议中,用"源IP“、“源端口号”、“目的IP”、“目的端口号”、"协议号"这样一个五元组来标识一个通信。

    注意:一个进程可以绑定多个端口号,因为一个进程可以打开多个文件描述符,而每个文件描述符都对应一个端口号,所以一个进程可以绑定多个端口号。一个端口号不能被多个进程绑定。

    netstat:一个用来查看网络状态的重要工具,常用选项如下:
    语法:netstat [选项]

    • n:拒绝显示别名,能显示数字的全部转化成数字
    • l:仅列出有在listen的服务状态
    • p:显示建立相关链接的程序名
    • t:(tcp)仅显示tcp相关选项
    • u:(udp)仅显示udp相关选项
    • a:(all)显示所有选项,默认不显示listen相关

    pidof:在查看服务器的进程id时非常方便。
    语法:pidof [进程名]

    1、UDP协议

    协议格式

    • 源端口号:16位
    • 目地端口号:16位
    • UDP长度(首部+数据):16位
    • UDP校验和:16位

    在这里插入图片描述

    特点

    • 无连接:知道对方的IP和端口号就直接进行传输,不需要建立连接
    • 不可靠:没有确认机制,没有重传机制,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息
    • 面向数据报:不能够灵活的控制读写数据的次数和数量

    面向数据报

    应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。但是UDP协议长度为16位,也就是说UDP能传输的数据最大是64K,如果要传输的数据超过64K,就需要在应用层手动分包、多次封装、多次发送,在接收段手动拼接。

    UDP缓冲区

    • UDP没有真正意义上的发送缓冲区。调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
    • UDP具有接收缓冲区。但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致,如果缓冲区满了,再到达的UDP数据就会被丢弃。

    基于UDP的应用层协议

    • NFS:网络文件系统
    • TFTP:简单文件传输协议
    • DHCP:动态住居配置协议
    • BOOTP:无盘设备启动协议
    • DNS:域名解析协议

    UDP如何实现可靠传输?

    在应用层引入和TCP可靠机制类似的实现逻辑。

    2、TCP协议

    协议格式

    • 源端口号:16位
    • 目的端口号:16位
    • 序号:32位
    • 确认序号:32位
    • 首部长度(首部(不含数据)有多少个4字节(32位),(5+10(选项))*4):4位
    • 保留:6位
    • 标志位(URG、ACK、PSH、RST、SYN、FIN):6位
    • 窗口大小:16位
    • 检验和:16位
    • 紧急指针:16位
    • 选项:40字节

    在这里插入图片描述
    ACK(确认应答)机制

    TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据,下一次你从哪里开始发。

    在这里插入图片描述
    超时重传机制

    主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B,如果主机A在一个特定时间间隔内没有收到B发来的确认应答,就会进行重发。

    在这里插入图片描述
    但是,主机A未收到B发来的确认应答,也可能是因为ACK丢失了,因此主机B会收到很多重复数据。那么TCP协议需要能够识别出那些包是重复的包,并且把重复的丢弃掉,这时候序列号就可以很容易做到去重的效果。

    在这里插入图片描述
    TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间。linux中超时以500ms为一个单位进行控制,每次判定超时都是500ms的整数倍,然后以指数的形式递增,即首次超时重传为1500ms,若未应答,第二次为2500ms,第三次为4*500ms…累计到一定重传次数,TCP认为网络或主机端异常,强制关闭连接。

    连接管理机制

    在这里插入图片描述
    滑动窗口

    对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点就是性能较差,尤其是数据往返的时间较长的时候。既然这样一发一收的方式性能较低,那么一次发送多条数据,就可以大大的提高性能。

    在这里插入图片描述
    窗口大小指的是无需等待确认应答而可以继续发送数据的最大值。发送前四个段的时候,不需要等待任何ACK,直接发送。收到第一个ACK后,滑动窗口向后移动,继续发送第五个段的数据,依次类推。操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答,只有确认应答过的数据,才能从缓冲区删掉。窗口越大,则网络的吞吐率就越高。

    在这里插入图片描述
    如果数据包抵达,ACK丢了,这种情况下,部分ACK丢了并不要紧,因为可以通过后续的ACK进行确认。如果数据包丢了,当某一段报文段丢失之后,发送端会一直收到401这样的ACK,如果发送端主机连续三次收到了同样一个401这样的应答,就会将对应的数据401 - 500重新发送,这个时候接收端收到了401之后,再次返回的ACK就是901了,接收端之前就已经收到了501-900,被放到了接收端操作系统内核的接收缓冲区中,这就是快重传。

    流量控制

    接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就叫做流量控制(Flow Control)。

    • 接收端将自己可以接收的缓冲区大小放入TCP首部中的窗口大小字段,通过ACK端通知发送端
    • 窗口大小字段越大,说明网络的吞吐量越高
    • 接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端
    • 发送端接收到这个窗口之后,就会减慢自己的发送速度
    • 如果接收端缓冲区满了,就会将窗口置为0,这时发送方不再发送数据,但是需要定期发送一个窗口探测数据,使接收端把窗口大小告诉发送端

    拥塞控制

    虽然TCP滑动窗口能够高效可靠的发送大量的数据,但是如果在刚开始阶段就发送大量的数据,仍然可能引发问题。因为网络上有很多的计算机,可能当前的网络状态就已经比较拥堵,在不清楚当前网络状态下,发送大量的数据,是很有可能引起网络拥塞,TCP引入慢启动机制,先发少量的数据探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据。

    拥塞窗口:发送开始的时候,定义拥塞窗口大小为1,每次收到一个ACK应答,拥塞窗口加1,每次发送数据包的时候,将拥塞窗口和接收端主机反馈的窗口大小做比较,取较小的值作为实际发送的窗口。

    慢启动:拥塞窗口的增长速度是指数级别,称慢启动。慢启动设定了一个阈值,在一开始以指数级别增长,当拥塞窗口超过这个阈值的时候,不再按照指数方式增长,而是按照线性方式增长。当TCP开始启动的时候,慢启动阈值等于窗口最大值,在每次超时重发的时候,慢启动阈值会变成原来的一半,同时拥塞窗口置1。

    拥塞控制小结:

    • 慢开始:指数增长到阈值
    • 拥塞避免:加法增大直到网络拥塞
    • 网络拥塞:乘法减小,阈值减到发生拥塞时拥塞窗口的一半

    延迟应答

    如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小。窗口越大,网络吞吐量就越大,传输效率就越高。

    延迟应答:每隔N个包应答一次,超过最大延迟时间就应答一次。具体的数量和超时时间,依操作系统不同也有差异,一般N取2,超时时间取200ms。

    捎带应答

    在延迟应答的基础上,ACK把回应的消息一并发给对方。

    面向字节流

    创建一个TCP的socket,同时在内核中创建一个发送缓冲区和一个接收缓冲区。调用write时,数据会先写入发送缓冲区中,如果发送的字节数太长,会被拆分成多个TCP的数据包发出,如果发送的字节数太短,就会先在缓冲区里等待,等到缓冲区长度差不多了或者其他合适的时机发送出去,接收数据的时候,数据也是从网卡驱动程序到达内核的接收缓冲区,然后应用程序可以调用read从接收缓冲区拿数据。TCP的一个连接,既有发送缓冲区也有接收缓冲区,那么对于这一个连接,既可以读数据也可以写数据,这叫全双工。

    由于缓冲区的存在,TCP程序的读和写不需要逐一匹配。比如读或写100字节数据时。可以一次调用read或write,也可以每次read或write一个字节,执行100次。

    TCP异常情况

    进程终止:进程终止会释放文件描述符,仍然可以发送FIN,和正常关闭没有什么区别。
    机器重启:和进程终止的情况相同。
    机器掉电/网线断开:接收端认为连接还在,一旦接收端有写入操作,接收端发现连接已经不在了,就会进行reset,即使没有写入操作,TCP自己也内置了一个保活定时器,会定期询问对方是否还在,如果对方不在,也会把连接释放,另外,应用层也有这种检测机制。

    TCP小结

    • 高可靠性:校验和、序列号、确认应答、超时重传、连接管理、流量控制、拥塞控制、定时器
    • 高性能:滑动窗口、快速重传、延迟应答、捎带应答
    • 基于TCP的应用层协议:HTTP、HTTPS、SSH、Telnet、FTP、SMTP
    • TCP/UDP对比:UDP适用于对高速传输和实时性要求高的通信,TCP适用于高可靠性通信。
    展开全文
  • 对于通信协议,很早之前就接触过。只是了解的不是太透彻,最近在找工作,才发现好多公司对这方面有要求。...语法:即如何通信,包括数据的格式、编码信号等级(电平的高低)等。 语义:即通信内容,包括...

    对于通信协议,很早之前就接触过。只是了解的不是太透彻,最近在找工作,才发现好多公司对这方面有要求。为了加深自己的专业知识,搜集了以下资料,带着自己的理解,想借此加深一下理解。

    通信协议
    通信协议是指通信时所遵守的规则,只有双方按照这个规则说话,对方才能理解或为之服务。

    三要素
    通信协议主要由以下三要素组成:
    语法:即如何通信,包括数据的格式、编码和信号等级(电平的高低)等。
    语义:即通信内容,包括数据内容、含义以及控制信息等。
    定时规则:即何时通信,明确通信的顺序、速率匹配和排序。

    TCP HTTP UDP三者的关系:
    TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
    在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
    在传输层有TCP协议和UDP协议。
    在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
    因此,HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
    socket
    这是为了实现以上的通信过程而建立的通信管道,其真实的代表时客户端和服务器端的一个通信进程,双方进程通过socket进行通信,而通信的规则采用指定的协议。socket只是一种连接模式,不是协议、tcp、udp
    ,简单的是两个最基本的协议,很多其它协议都是基于这两个协议。http就是基于tcp的,用socket可以创建tcp连接,也可以创建udp连接,这意味着,用socket可以创建任何协议的连接,因为其它协议都是基于此的。

    什么是http协议
    HTTP全称是Hyper Text Transfer Protocal,即超文本传输协议,它允许将超文本标记语言(HTML)文档从web服务器传送到客户端的浏览器,默认80端口。目前我们用的是HTTP/1.1版本。Http是一个基于请求/响应模式的、无状态的协议。即我们通常说的Request/Response。HTTP基于TCP/IP协议的应用层协议,用于客户端和服务端之间的通信。当我们打开浏览器,在地址栏输入URL,我们的浏览器给web服务器发送一个request,web服务器接收request进行处理,生成相应的Response,然后发送给浏览器,浏览器解析Response中的HTML,这样我们就看到了网页。
    HTTP的面向连接、无状态特点
    http是一个属于应用层的面向对象的协议,HTTP协议一共有五大特点:1.支持客户/服务器模式;2.简单、快速;3.灵活;4.面向连接;5.无状态。
    (1)工作原理
    HTTP协议定义Web客户端如何从Web服务端请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应机制。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者,,错误代码,服务器信息、响应头部和响应数据。HTTP事务的过程如下:
    1.客户端连接到Web服务器
    一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接,例如,http://www.luffycity.com.
    2.发送HTTP请求
    通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
    3.服务器接受请求并返回HTTP响应
    Web服务器解析请求,定位请求资源。服务器将资源副本写到TCP套接字中,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
    4.释放TCP连接
    若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。
    5.客户端浏览器解析HTML内容
    客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
    2)无状态
    无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送HTTP请求之后,服务器根据请求,会给我们发送数据过来,但是发送完,不会记录任何信息,关闭连接。HTTP是一个无状态的协议,这意味着每个请求都是独立的。
    Get、Post
    get是从服务器获取数据,post 是向服务器发送数据。

    TCP协议
    tcp定义
    TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。
    TCP工作原理
    在TCP/IP协议提供可靠的连接的服务,采用三次握手建立一个连接:
    第一次握手:建立连接时,客户端发送一个
    SYN(请求同步)数据包到服务器,并进入SYN_SEND状态,等待服务器确认。
    第二次握手:服务器收到SYN包,确认同步发出ack包,同时自己也发送一个SYN(请求同步)数据包到客户端,此时服务器进入SYN_RECV状态。
    第三次握手:客户端将收到服务器的SYN+ACK包,向服务器发送确认同步包ACK,此包发送完毕,客户端与服务器建立连接,完成第三次握手。

    qq

    四次挥手:终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包已确认连接的断开。在Socket编程中,这一过程由客户端或服务端任一方执行close来触发,具体流程图如下。
    1.客户端向服务端发送FIN用来关闭服务器和客户端的数据传送;
    2.服务器接收到FIN并向服务器发送ACK
    3.服务器关闭与客户端的连接,并发送FIN给客户端
    4.客户端发送ACK报文确认
    在这里插入图片描述

    UDP协议
    UDP(User Datagram Protocol)该协议称为用户数据报协议,为应用程序提供了一种无需建立连接就可以发送的IP数据报的方法。它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

    展开全文
  • 有关HTTP协议、TCP和UDP协议整理

    千次阅读 2018-04-03 11:44:00
    1:超文本传送协议1: HTTP协议定义了...2:HTTP使用了面向连接的TCP作为传输层协议,保证了数据的可靠传输。 HTTP协议是无连接的,通信的双发在交换HTTP报文之前不需要先建立HTTP连接 HTTP协议是无状态的,服务器...

    1:超文本传送协议

    1: HTTP协议定义了浏览器怎么向服务器请求文档,以及怎么把文档传送给浏览器。从层级的角度看,HTTP协议是面向事务的应用层协议。HTTP报文通常使用TCP连接传送。

    2:HTTP使用了面向连接的TCP作为传输层协议,保证了数据的可靠传输。

            HTTP协议是无连接的,通信的双发在交换HTTP报文之前不需要先建立HTTP连接

            HTTP协议是无状态的,服务器并不记得曾经访问过的客户,和访问次数。这种特性简化了服务器的设计和支持大量并发的HTTP请求

            HTTP在TCP的三次握手的前两部分完成后,客户端就把HTTP请求报文作为第三个报文的数据发送给服务器。

    3:HTTP/1.0和HTTP/1.1

            HTTP/1.0:使用的非持续连接,这会使服务器的负担很重。

            HTTP/1.1:使用了持续连接,有两种工作方式,1:流水线方式---可以多请求多响应。2:非流水线方式--一次一个请求

    4:HTTP报文

            HTTP报文--请求报文和响应报文,HTTP是面向文本的。都由三部分组成:开始行、首部行、实体主体。

            请求报文--请求行、首部行、实体主体

            HTTP请求的细节——请求行

            请求行中的GET 称之为请求方式,请求方式有:

             POST、 GET 、 HEAD 、 OPTIONS 、 DELETE 、 TRACE 、 PUT

                常用的有: GET 、  POST

                用户如没有设置,默认情况下浏览器向服务器发送的都是get 请求,例如在浏览器直接输地址访问,点超链接访问等都是         get ,用户如想把请求方式改为 post ,可通过更改表单的提交方式实现。

            不管POST 或 GET ,都用于向服务器请求某个 WEB 资源,这两种方式的区别主要表现在数据传递上:

            如请求方式为GET 方式,则可以在请求的 URL 地址后以 ? 的形式带上交给服务器的数据,多个数据之间以 & 进行分隔,例如:

            GET /mail/1.html?name=abc&password=xyz HTTP/1.1

            GET方式的特点:在 URL 地址后附带的参数是有限制的,其数据容量通常不能超过 1K 。

            如请求方式为POST 方式,则可以在请求的实体内容中向服务器发送数据, Post 方式的特点:传送的数据量无限制。


            HTTP请求的细节——首部行

            用于HTTP 请求中的常用头

            Accept: text/html,image/*     //允许的请求文档类型

            Accept-Charset: ISO-8859-1

            Accept-Encoding: gzip,compress

            Accept-Language: en-us,zh-cn //表示用户希望优先得到中文版的请求文档

            Host: www.it315.org:80//主机域名及端口号

            If-Modified-Since: Fri, 11 Dec 2015 18:23:51 GMT

            Referer: http://www.it315.org/index.jsp

            User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

            Cookie

            Connection: close/Keep-Alive   

            Date: Fri, 11 Dec 2015 18:23:51 GMT
            

            HTTP响应的细节——状态行

            状态行

            格式: HTTP 版本号 状态码 原因叙述 <CRLF>

            举例:HTTP/1.1 200 OK

            状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5 类,如下所示:


            响应状态码à典型情况


            200(正常) 

            表示一切正常,返回的是正常请求结果。

            302/307(临时重定向)

            指出被请求的文档已被临时移动到别处,此文档的新的URL 在 Location 响应头中给出。

            304(未修改)

            表示客户机缓存的版本是最新的,客户机应该继续使用它。

            403(禁止) 

            服务器理解客户端请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置所致。 

            404(找不到) 

            服务器上不存在客户机所请求的资源。

            500(内部服务器错误) 

            服务器端的CGI 、 ASP 、 JSP 等程序发生错误。


            HTTP响应细节——常用响应头


            HTTP请求中的常用响应头

            Location: http://www.it315.org/index.jsp //重定向URL

            Server:apache tomcat

            Content-Encoding: gzip 

            Content-Length: 80 

            Content-Language: zh-cn 

            Content-Type: text/html; charset=GB2312 

            Last-Modified: Fri, 11 Dec 2015 18:23:51 GMT

            Refresh: 1;url=http://www.it315.org

            Content-Disposition: attachment; filename=aaa.zip

            Transfer-Encoding: chunked  

            Set-Cookie:SS=Q0=5Lb_nQ; path=/search

            ETag: W/"7777-1242234904000"

            Expires: -1

            Cache-Control: no-cache  

            Pragma: no-cache   

            Connection: close/Keep-Alive   

            Date: Fri, 11 Dec 2015 18:23:51 GMT


    传输层协议:TCP协议和UDP协议

        TCP建立连接/三次握手
        
    图片来源:点击打开链接
    四次挥手:


    用户数据报协议UDP

            UDP:提供了不面向连接通信,适合一次传输小量数据,可靠性由应用层负责


    展开全文
  • UDP协议&TCP协议

    2019-04-18 19:44:00
    UDP协议&TCP协议 域名: DN (Domain name)是由一串由点分隔的名字组成的Internet上某一台计算机或计算机组的名称。 域名服务系统:DNS:它可以作为将域名IP地址相互映射的一个分布式...

    UDP协议&TCP协议

    域名:

    DN (Domain name)是由一串由点分隔的名字组成的Internet上某一台计算机或计算机组的名称。

    域名服务系统:DNS:它可以作为将域名和IP地址相互映射的一个分布式数据库。

    协议:

        应用层常见协议:

      http协议:超文本传输语言。

      ftp协议:文件传输协议

      smtp协议:简单邮件传输协议

     传输层的协议:

      UDP协议:用户数据报协议,面向无连接的,简单不可靠的传输层协议。

    1.   面向无连接
    2.        通过数据报包来进行传输,每个数据报包大小不会超过64k.
    3.        不可靠的传输。
    4.        传输速度快。

      TCP协议:传输控制协议,一种面向连接的,可靠的,基于字节流的传输层通信协议。

      TCP协议传输过程:

      要经过三次握手,确定通道的连接。

      建立流的传输通道,进行数据的传输。

      TCP传输协议的特点:

    1.   面向连接的
    2.        通过流通道进行数据的传输
    3.        可靠的连接
    4.        速度慢

    UDP协议传输

    代码示例:

    发送端:

     1 /**
     2 
     3 1. 发送数据报包
     4 ①  创建发送端的套接字对象。
     5 ②  打包数据,用的 DatagramPacket
     6 DatagramPacket(byte[] buf, int length, InetAddress address, int port)
     7 ③  发送
     8 send(dp)
     9 ④  关闭资源
    10 close
    11 */
    12 public class  发送端 {
    13 public static void main(String[] args) throws IOException, UnknownHostException {
    14 // ①  创建发送端的套接字对象。
    15 DatagramSocket ds=new DatagramSocket();
    16 String s=" 接收端您好 ";
    17 byte[] buf=s.getBytes();
    18 DatagramPacket dp=new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 9000);
    19 // 发送
    20 ds.send(dp);
    21 // 等待接收端的响应 --> 接收端
    22 // 空的数据报包接收
    23 byte[] buf1=new byte[1024];
    24 DatagramPacket dp1=new DatagramPacket(buf1, buf1.length);
    25 ds.receive(dp1);
    26 // 显示
    27 System.out.println(new String(dp1.getData()));
    28 ds.close();
    29 }
    30 }

     

    接收端:

     1 /**
     2 . 用来接收数据报包
     3 ①  创建一个接收数据的套接字。
     4 ②  创建一个空的数据报包来接收数据
     5 ③  接收 receive(DatagramPacket p)
     6 ④  关闭
     7 */
     8 public class  接收端 {
     9 public static void main(String[] args) throws IOException {
    10 // ①  创建一个接收数据的套接字。
    11 DatagramSocket ds=new DatagramSocket(9000);
    12 // ②  创建一个空的数据报包来接收数据
    13 // DatagramPacket(byte[] buf, int length)
    14 byte[] buf=new byte[1024];
    15 DatagramPacket dp=new DatagramPacket(buf, buf.length);
    16 // 接收
    17 ds.receive(dp);
    18 // 显示 getLength  返回接收到的数据的字节长度
    19 System.out.println(new String(buf,0,dp.getLength()));
    20 // 发送端响应 -- 》发送端
    21 //getAddress/getPort  获取发送端的 ip 地址与端口号
    22 DatagramPacket p=new DatagramPacket(" 发送端您好 ".getBytes(), " 发送端您好 ".getBytes().length, d
    23 p.getAddress(), dp.getPort());
    24 ds.send(p);
    25 // 关闭
    26 ds.close();
    27 }
    28 }

     

     

     

     

     

    TCP协议传输

    代码示例:

    服务器端代码:

     1 package DemoEE;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.net.ServerSocket;
     6 import java.net.Socket;
     7 
     8 public class 服务器端3 {
     9 
    10     public static void main(String[] args) throws IOException {
    11         System.out.println("正在等待客户端连接");
    12         ServerSocket ss=new ServerSocket(9004);
    13         Socket s=ss.accept();
    14         InputStream is=s.getInputStream();        
    15         byte[] bt=new byte[1024];
    16         int count=0;
    17         while((count=is.read(bt))!=-1) {
    18             System.out.println(new String(bt,0,count));
    19         }
    20     }
    21 }

     

    客户端代码:

     1 package DemoEE;
     2 
     3 import java.io.IOException;
     4 import java.io.OutputStream;
     5 import java.net.InetAddress;
     6 import java.net.Socket;
     7 
     8 public class 客户端3 {
     9 
    10     public static void main(String[] args) throws IOException, IOException {
    11         Socket s=new Socket(InetAddress.getByName("localhost"),9004);
    12         OutputStream os=s.getOutputStream();
    13         os.write(new String("服务器端你好").getBytes());
    14         os.close();
    15         s.close();
    16         
    17     }
    18 }

     

    先执行服务器端,执行效果:

    执行客户端,执行效果:

     

    代码示例二:

    服务器端:

     1 /**
     2 
     3 1. 创建服务器端的对象: 在指定端口监听是否有客户端进行连接。
     4 2. 通过 accept 方法进行监听,并通过三次握手建立连接流通道。
     5 3. 从客户端读取内容,获取流通道中的输入流
     6 4. 关闭资源
     7 */
     8 public class  服务器端 {
     9 public static void main(String[] args) throws IOException {
    10 // 1. 创建服务器端的对象: 在指定端口监听是否有客户端进行连接。
    11 ServerSocket ss=new ServerSocket(9000);
    12 //2. 通过 accept 方法进行监听,并通过三次握手建立连接流通道。
    13 // 返回值为当前要连接的客户端对象
    14 System.out.println(" 等待客户端的连接。。。。 ");
    15 Socket s=ss.accept();
    16 //3. 从客户端读取内容,获取流通道中的输入流
    17 InputStream is = s.getInputStream();
    18 // 读取
    19 byte[] b=new byte[1024];
    20 int count=0;
    21 while((count=is.read(b))!=-1) {
    22 System.out.println(new String(b,0,count));
    23 }
    24 // 关闭资源
    25 is.close();
    26 ss.close();
    27 }
    28 }

     

    客户端:

     1 /**
     2 
     3 1. 创建客户端的对象: 指定服务器,服务器的端口
     4 2. 向服务器端写入,获取流通道中的输出流
     5 3. 关闭资源
     6 */
     7 public class  客户端 {
     8 public static void main(String[] args) throws IOException {
     9 // 1. 创建客户端的对象: 指定服务器,服务器的端口
    10 Socket s=new Socket(InetAddress.getByName("localhost"), 9000);
    11 // 2. 向服务器端写入,获取流通道中的输出流
    12 OutputStream os = s.getOutputStream();
    13 os.write(" 服务器端您好 ".getBytes());
    14 // 关闭资源
    15 os.close();
    16 s.close();
    17 }
    18 }

     

     

    代码示例三:

    进阶班客户端:

     1 package com.tcp2;
     2 import java.io.BufferedReader;
     3 import java.io.BufferedWriter;
     4 import java.io.InputStreamReader;
     5 import java.io.OutputStream;
     6 import java.io.OutputStreamWriter;
     7 import java.net.InetAddress;
     8 import java.net.Socket;
     9 /**
    10 
    11 1. 客户端
    12 */
    13 public class  客户端 {
    14 public static void main(String[] args) {
    15 // 客户端对象
    16 try(Socket client=new Socket(InetAddress.getByName("localhost"), 9000);
    17 // 用户输入
    18 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    19 // 向服务器端发送信息,输出流
    20 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
    21 // 读取从服务器写入的内容 输入流
    22 BufferedReader bre=new BufferedReader(new InputStreamReader(client.getInputStream()));
    23 ){
    24 System.out.println(" 客户端要发送到服务器端的内容为: ");
    25 // 通过用户输入信息
    26 String msg = br.readLine();
    27 // 将用户输入的信息发送到服务器端
    28 bw.write(msg);
    29 // 换行的标识
    30 bw.newLine();
    31 // 刷新缓冲区
    32 bw.flush();
    33 // 等待接收
    34 String msgServer = bre.readLine();
    35 System.out.println(" 从服务器获取的信息: "+msgServer);
    36 }catch (Exception e) {
    37 e.printStackTrace();
    38 }
    39 }
    40 }

     

    进阶版服务器端:

     1 package com.tcp2;
     2 import java.io.BufferedReader;
     3 import java.io.BufferedWriter;
     4 import java.io.InputStreamReader;
     5 import java.io.OutputStreamWriter;
     6 import java.net.ServerSocket;
     7 import java.net.Socket;
     8 /**
     9 
    10 1. 服务器端
    11 */
    12 public class  服务器端 {
    13 public static void main(String[] args) {
    14 // 服务器
    15 try(ServerSocket ss=new ServerSocket(9000);){
    16 System.out.println(" 等待客户端的连接。。。。。 ");
    17 // 连接每一个客户端
    18 try(Socket client=ss.accept();
    19 // 读取客户端发送的信息
    20 BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
    21 // 获取服务器端用户输入的信息
    22 BufferedReader bin=new BufferedReader(new InputStreamReader(System.in));
    23 //  向客户端写入信息
    24 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
    25 ){
    26 // 读取客户端发来的信息
    27 String clientMsg = br.readLine();
    28 System.out.println(" 从客户端发来的消息为: "+clientMsg);
    29 System.out.println(" 服务器端要发送到客户端的内容为: ");
    30 // 服务器端用户输入信息
    31 String input = bin.readLine();
    32 // 向客户端写入
    33 bw.write(input);
    34 bw.newLine();
    35 bw.flush();
    36 }catch (Exception e) {
    37 e.printStackTrace();
    38 }
    39 }catch (Exception e) {
    40 e.printStackTrace();
    41 }
    42 }
    43 }

     

    posted @ 2019-04-18 19:44 ControllerMe 阅读(...) 评论(...) 编辑 收藏
    展开全文
  • 首先咱们弄清楚,TCP协议和UDP协议与TCP/IP协议的联系,很多人犯糊涂了, 一直都是说TCP协议UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇。里面包括很多协议的,UDP只是其中的...
  • IP协议和TCP/UDP协议

    2020-10-05 12:49:26
    TCP和UDP是两种最为著名的传输层协议,它们都是使用IP作为网络层协议。IP协议提供了一组数据报文服务,每组分组报文都是由网络独立处理分发,就像寄送快递包裹一样,为了实现这个功能,每个IP报文必须包含一个目的...
  • TCP/UDP 协议 HTTP协议

    千次阅读 2010-02-08 16:33:00
    tcp:是机器之间建立连接用的到的一个协议。IP (网际协议) 在网络通信中,网络组件的寻址对信息的路由选择传输来说是相当关键的。相同网络中的两台机器间的消息传输有各自的技术协定。LAN 是通过提供6字节的...
  • 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。ICMP是(Internet Control ...
  • TCP协议和UDP协议

    2018-11-06 10:59:10
    TCP协议和UDP协议TCP(transfer control protocol) • 一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议 。 • 特点 • 面向连接 • 点到点的通信 • 高可靠性:三次握手 • ...
  • http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,在上网浏览网页的时候,浏览器web服务器之间通过HTTP在Internet上进行数据的发送接收。常基于TCP的连接方式http表示要通过HTTP协议...
  • TCP UDP协议

    2018-11-23 21:10:48
    传输层中有:TCP协议和UDP协议; 应用层中有:FTP、HTTP、TELNET、SMTP、DNS等协议. HTTP协议: 建立在请求/响应模型上.首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法\URI\协议版本...
  • 通信协议 HTTP TCP UDP

    2016-03-09 16:18:00
    TCP HTTP UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。 TCP HTTP UDP三者的关系: TCP/IP是个协议组,可...在传输层中有TCP协议UDP协议。 在应用...
  • TCP和UDP协议

    2016-03-09 16:37:15
    TCP/IP协议是一系列网络协议的总称,这些协议的目的,就是使计算机之间可以进行信息交换,TCP/IP协议一共包括了几百种协议,例如,TCP协议、UCP协议、IP协议、HTTP协议、FTP协议等 这些协议可以大致分为四个层次,...
  • HTTP与RPC的区别:人们常常错误地将HTTP称作一种远程过程调用(RPC)[23]机制,仅仅是因为它包括了请求响应。 调用远程机器上的一个过程(procedure)的观念,是RPC与其他形式的基于网络的应用通信的区别在。 RPC...
  • 网络七层模型就是一个参考模型,也就是说有这么个七层的定义,就像是项目中的dao、service、controller三层架构一样,每一层都有自己的工作要干,互联网协议就按照不同的作用分为osi七层或tcp/ip五层或tcp/ip四层。...
  • web开发常用的协议TCP UDP 和HTTP

    千次阅读 2018-05-15 10:00:00
    HTTP:万维网浏览的协议; TCP:机器之间建立连接用到的...传输层:TCP协议和UDP协议; 应用层:FTP,HTTP,TELNET,SMTP,DNS等协议; HTTP本身就是一个是协议,是从网络服务器传输超文本到本地浏览器的传送协议。 ...
  • web HTTP TCP UDP协议详情

    2017-04-11 11:43:46
    TCP HTTP UDP HTTP/TCP/UDP 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。 TCP/HTTP/UDP三者的关系 ...在传输层中有TCP协议UDP协议。 在应用
  • 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是...

空空如也

1 2 3 4 5 ... 20
收藏数 5,011
精华内容 2,004
热门标签
关键字:

udp协议和tcp协议http