网络由下往上分为
物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,socket则是对TCP/IP协议的封装和应用(程序员层面上)。
了解3个东西:
1. TPC/IP协议是传输层协议,主要解决数据如何在网络中传输
2. HTTP是应用层协议,主要解决如何包装数据。
我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。
3. socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
函数有create、listen、connect、accept、send、read和write等等。
比喻:
HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
区别:
1. Http是短链接,http协议打开一个信息点的时候,信息读取完毕双方会自动断开。
socket是长链接,也就是说除非双方主动断开,否则,他不会自动断开。(一直不断也不好,有些死链接是问题。为了保持服务器资源的最大利用率,通常我们会要求双方通过定时的心跳方式来确认长链接的有效性.只要心跳不存在,服务器就可以及时剔除掉这些死链接。)
2. http只能走tcp,socket不仅能走tcp,而且还能走udp,这个是socket的第一个特点。
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状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
TCP和UDP的区别:
1. TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;
2. UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
相关推荐
Cannot create TCP/IP socket(24).原因及解决办法
实现了服务器与客户端功能的合二为一,客户端启动后,连接三次服务器,如果失败,则自己自动变为服务器。
Java + TCP/IP+ Socket编程++ 原书第2版.pdf 中文版
基于TCP/IP的Socket多线程通信(服务器和客户端),需要的请下载看看。
对TCP/IP和socket相关的知识和原因进行了一个简单的总结。
Java TCP/IP Socket编程 Java TCP/IP Socket编程 Java TCP/IP Socket编程
计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议。TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登陆BBS,用的就是TCP协议;UDP是无连接的,通信双方都...
基于TCP/IP协议的Socket编程,JAVA实现详解
基于tcp/ip的socket回射程序 基于tcp/ip的socket回射程序 基于tcp/ip的socket回射程序
两本TCP/IP socket编程书,分别是C语言和Java语言版的。都是文字版的pdf文档。 1. TCP/IP Sockets in Java (2th Edtion) 2. TCP/IP Sockets in C *Series Editor: Michael J. Donahoo
基于TCP/IP协议socket的文件传输,可以自己设置IP地址和端口,并把IP地址和端口写入XML,并读取其XML里的数据来进行传输
TCP/IP SOCKET 网络编程 多模式I/O网络开发
java TCP/IP socket 编程(原书第2版)+部分源码,对于想学习java socket编程很有帮助!
TCP/Ip通讯源代码,可参照该代码,做局域网通讯的vb完整通讯,有一定的借鉴作用
TCP/IP协议socket编程。学习资料、、分客户端和服务器端
C语言TCP/IP网络 socket 通信源码,非常有用。
《Java TCP/IP Socket编程(原书第2版)》基于TCP/IP Socket相关原理,对如何在Java中进行Socket编程作了深入浅出的介绍。《Java TCP/IP Socket编程(原书第2版)》内容简明扼要,条理清晰,并在讲解相应的概念或编程...
在7CP/IP Socket首次发布时,Java作为一个新的未被关注的编程语 言刚出现。然而,自2001年以来,Java的网络编程能力已经得到了很大程度的扩展,而且 持续的应用优势已经使其成为了一个占主导地位的平台。考虑到Java...
用C#写的简单的TCP/IP通信小示例,开发环境为VS2013,里面有一个服务端和一个客户端,适合新手看看
这个聊天室中,使用了TCP/IP socket 网络编程,多线程,使用Linux(ubantu)MySQL。