mysql socket tcp udp_http、TCP/IP协议与socket、udp、webservice 等差别

本文详细介绍了TCP/IP协议族中的网络层、传输层协议,包括TCP的三次握手与四次挥手过程,以及UDP的无连接、不可靠传输特性。此外,还讨论了HTTP、FTP、WebSocket等应用层协议,以及Socket编程接口和长连接、短连接的区别。
摘要由CSDN通过智能技术生成

计算机层级划分如下:

dc9bb15eb9125bb61aaddc47501c501f.png

一、网络层协议:

定义:网络层协议主要应用于主机与主机之间的相互通信。网络层提供路由和寻址的功能,使两终端系统能够互连且决定最佳路径,并具有一定的拥塞控制和流量控制的能力。

应用:网际协议IP、Internet互联网控制报文协议ICMP、Internet组织管理协议IGMP、地址解析协议ARP。

二、传输层协议

定义:传输层协议主要用于主机的进程与进程之间的相互通信

应用:传输控制协议TCP和用户数据报协议UDP

1.TCP协议:

面向连接的可靠传输协议。利用TCP进行通信时,首先要通过三步握手,以建立通信双方的连接。TCP提供了数据的确认和数据重传的机制,保证发送的数据一定能到达通信的对方。

TCP连接“三次握手”:

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

SYN(synchronous建立联机)

ACK(acknowledgement 确认)

FIN(finish结束)

7c099aeab8b1849189a31a7be6bcbe65.png

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

断开连接时“四次挥手”:(是为了保证传输已完成)

9f0fda59f50c0a5a969f7cde68cced77.png

为什么要4次挥手?

确保数据能够完整传输。

当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。

但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,

再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。

2.UDP协议:

是无连接的,不可靠的传输协议。采用UDP进行通信时不用建立连接,可以直接向一个IP地址发送数据,但是不能保证对方是否能收到。(就像发生短信,只需要知道对方手机号码就行,至于对方是否接收成功不管)

三、应用层协议

1.应用举例:

1).超文本传输协议(HTTP)默认使用了TCP的80端口号 :

HTTP是一个无状态的协议;HTTP协议是建立在TCP协议之上的一种应用;由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态

a.在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。

b.在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

2).文件传输协议(FTP)默认使用TCP的21端口号

3).远程登录协议(Telnet)默认使用了TCP的23端口号

4).简单邮件传输协议(SMTP)默认使用了TCP的25端口号

5).域名服务协议(DNS)默认使用了UDP的53端口号

6).RIP协议默认使用了UDP的520端口号

7).DHCP协议默认使用了UDP的67端口号

2.HTTP协议的工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。  如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。

3.web service相对http (post/get)有好处吗?

两者差别:这两个是完全不同的概念,http是一种网络协议,而webservice是一种两个应用程序之间实现通信的解决方

1).接口中实现的方法和要求参数一目了然

2).不用担心大小写问题

3).不用担心中文urlencode问题

4).代码中不用多次声明认证(账号,密码)参数

5).传递参数可以为数组,对象等...

6).由于要进行xml解析,速度可能会有所降低。

4.Socket连接与HTTP连接

Socket是操作系统提供的一个编程接口,通过socket来调用系统内核中处理网络协议的模块,我们只需要提供所要传输的内容就可以了;我们并不需要知道具体怎么构成一个UDP包。Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。Socket本身并不是协议,而是一个调用接口(API)

HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据;若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端

5.FTP和HTTP文件上传方式区别

FTP(File Transfer Protocol,文件传输协议是Internet上使用非常广泛的一种通讯协议,它是为Internet用户进行文件传输(包括文件的上传和下载)而制定的。要想实现FTP文件传输,必须在相连的两端都装有支持FTP协议的软件; FTP方式慢慢已不建议采用;

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

6.长连接和短连接区别

短连接

连接->传输数据->关闭连接

HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,到任务结束就中断连接。

也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。

长连接

连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。

长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。这就要求长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态,短连接在没有数据传输时直接关闭就行了。

7.java socket半包、粘包问题解决方案

1)以特殊字符串比如/r、/n作为数据的结尾,这样就可以区分数据包了。

2)发送请求包的时候只发送固定长度的数据包,这样在服务端接收数据也只接收固定长度的数据,这种方法效率太低,不太合适频繁的数据包请求。

3)在tcp协议的基础上封装一层数据请求协议,既数据包=数据包长度+数据包内容,这样在服务端就可以知道每个数据包的长度,也就可以解决半包、粘包问题

8、进程间通讯的方式有哪些,各有什么优缺点:

1)管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用。进程的亲缘关系通常是指父子进程关系。

2)有名管道(FIFO):有名管道也是半双工的通信方式,但是允许在没有亲缘关系的进程之间使用,管道是先进先出的通信方式。

3)信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

4)消息队列:消息队列是有消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5)信号 ( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

6)共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

7)套接字( socket ) :套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是开发Http/WebService/Socket协议脚本的基本步骤: 1. 确定测试工具和框架:选择合适的测试工具和框架来编写协议脚本。例如,Apache JMeter是一个常用的Http协议测试工具,SoapUI是一个常用的WebService协议测试工具,Netty是一个常用的Socket协议测试框架。 2. 设计测试用例:根据协议的特点和需求,设计合适的测试用例。测试用例应该覆盖协议的各个方面,包括请求参数、响应状态码、响应内容等。 3. 编写测试脚本:根据测试用例,编写相应的测试脚本。测试脚本应该能够发送请求、接收响应,并对响应进行断言和验证。 以下是一个简单的Http协议测试脚本示例: ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class HttpTest { public static void main(String[] args) throws Exception { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://example.com/api/userinfo?token=test_token"); CloseableHttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); String responseBody = EntityUtils.toString(entity); System.out.println(responseBody); response.close(); httpClient.close(); } } ``` 在这个例子中,我们使用Apache HttpClient库来发送Http请求和接收响应。我们首先创建一个CloseableHttpClient对象,然后使用HttpGet对象来设置请求的URL和参数。使用httpClient.execute()方法发送请求,并获取响应。使用HttpEntity对象来获取响应内容,并使用EntityUtils.toString()方法将内容转换为字符串。最后,我们输出响应内容并关闭连接。 类似的,我们可以使用其他工具和框架来编写WebServiceSocket协议的测试脚本,具体实现方式可以根据实际情况做出调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值