http、TCP/IP协议与socket、udp、webservice 等差别

计算机层级划分如下:

一、网络层协议:

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

应用:网际协议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结束)

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

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

为什么要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 ) :套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

转载于:https://my.oschina.net/u/2322635/blog/397120

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值