Socket的基础知识(一)
来源:互联网 发布:天刀清纯萝莉捏脸数据 编辑:程序博客网 时间:2024/06/06 19:44
1.socekt的概念:
1.也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信
2.Socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之 前,双方必须各自拥有一台电话机一样。
举例说明:
HTTP协议是建立在TCP协议之上的一种应用。
举例说明:
Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。
2.连接步骤:
2.1
套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
2.2
TCP/IP、Http、Socket的区别
1.实际上socket是对TCP/IP协议的封装(程序员层面上),Socket本身并不是协议,而是一个调用接口(API)。通Socket们才能使用TCP/IP协议。
Socket跟TCP/IP协议没有必然的联系
”TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。
这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,
TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”
2.TPC/IP协议 是传输层协议,主要解决数据如何在网络中传输,
3.HTTP 是应用层协议,主要解决如何包装数据。
关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:
我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。
如果想要使传输的数据有意义,则必须使用到应用层协议。
HTTP协议是建立在TCP协议之上的一种应用。
“HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。”
顺便说一下websocket和socket的区别,
websocket和socket的关系:
可以把WebSocket想象成HTTP,HTTP和Socket什么关系,WebSocket和Socket就是什么关系
2.3
三次握手:
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。
(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
看图来区分会更直观: 0 0
- Socket的基础知识(一)
- socket 的基础知识(一)
- Socket基础知识(一)
- SOCKET基础知识(一)
- iOS中的Socket编程,Socket基础知识(一)
- Socket编程的基础知识
- socket的基础知识
- HTML的基础知识(一)
- mybatis的基础知识 (一)
- PHP的基础知识(一)
- nodeJs的基础知识(一)
- WEB代码的一些基础知识(一)
- 锋利的JQuery----JavaScript基础知识(一)
- 剑指offer:面试的基础知识(一)
- C#基础知识的整理(一)
- java面试用到的基础知识(一)
- Linux基础知识的学习(一)
- JavaScript基础知识(一、二的补充)
- JSTL
- I/O流具体例子
- 开发测试篇-android测试-介绍(翻译自android training官网)
- Grouping by Query
- mysql常用sql
- Socket的基础知识(一)
- linux修改/etc/sudoers文件
- B+树的实现,主要讲解删除操作
- C++ 知识:继承、派生类、虚基类、虚函数
- netvideohunter 火狐视频下载插件
- 将krpano右键全屏(fullscreen)修改为中文|(html5/desktop 等去掉)
- 避免死锁的银行家算法
- html-菜鸟--书架&仿饿了么首页
- Keil------解决..\SYSTEM\sys\stm32f10x.h(298): error: #67: expected a "}"