SOCKET网络学习

===============================2015/8/31 13:48:48
Socket 套接字
用来描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
Internet上的主机一般运行了多个服务软件,同时提供几种服务,每种服务都打开一个Socket,并绑定到一个端口上,不同端口对应着不同的服务。
相关模型:对等模型、C/S模型


TCP/IP(Transmission Control Protocol/Internet Protocol)
即传输协议/网间协议,定义了主机如何连入因特网机数据如何在它们之间传输的标准
应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet等
传输层:TCP,UDP
网络层:IP,ICMP,OSPF,EIGRP,IGMP
数据链路层:SLIP,CSLIP,PPP,MTU


Socket
两个进程如果需要进行通信最基本的一个前提是能够有唯一的标示一个进程
我们利用IP地址+协议+端口号 唯一标示网络中的一个进程


Socket抽象层:是在应用层和传输层之间的抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程中网络中通信。


Socket通信流程
是“打开-读/写-关闭”模式的实现
面向连接的套接字 TCP
服务端:  server
socket()   创建socket
bind() 绑定socket和端口号
listen()   监听该端口号
accept()   接收来自客户端的连接请求
recv()     从socket中读取字符
close()    关闭socket
客户端:  client 
socket()   创建socket  阻塞??
connect()  连接指定计算机的端口
send()     向socket中写入信息
close()    关闭socket


无连接协议的套接字 UDP
服务端:  server
socket()   创建socket
bind() 绑定socket和端口号
recvfrom()/sendto()     从socket中读取字符
close()    关闭socket
客户端:  client 
socket()   创建socket  阻塞??
bind()     连接指定计算机的端口
recvfrom()/sendto()     向socket中写入信息
close()    关闭socket

三次握手:
第一次握手:客户端尝试连接服务器,想服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认
第二次握手:服务端接收客户端SYN包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端接收服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
------------------------------------------------------------
SOCKET编程基本概念
1)端口:网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源
TCP/IP协议提出了协议端口(protocol port端口)的概念,用于识别通信的进程。
端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)
TCP和UDP是完全独立的两个软件模块,各自的端口号也互相独立,没有冲突。
端口号的分配是一个重要问题。有两种基本分配方式:第一种叫全局分配,这是一种集中控制方式,由一个公认的中央机构根据用户需要进行统一分配,并将结果公布于众。
第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回一个本地唯一的端口号,进程再通过合适的系统调用将自己与该端口号联系起来(绑扎)。
TCP/IP将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。因此,每一个标准服务器都拥有一个全局公认的端口(即周知口,well-known port),即使在不同的机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。TCP和UDP均规定,小于256的端口号才能作保留端口。 
2)地址 
网络通信中通信的两个进程分别在不同的机器上。在互连网络中,两台机器可能位于不同的网络,这些网络通过网络互连设备(网关,网桥,路由器等)连接。因此需要三级寻址: 
1. 某一主机可与多个网络相连,必须指定一特定网络地址; 
2. 网络上每一台主机应有其唯一的地址; 
3. 每一主机上的每一进程应有在该主机上的唯一标识符。 
通常主机地址由网络ID和主机ID组成,在TCP/IP协议中用32位整数值表示;TCP和UDP均使用16位端口号标识用户进程。
3)网络字节顺序
4)连接
5)半相关
6)全相关     http://blog.youkuaiyun.com/hguisu/article/details/7444092
TCP/IP的socket提供下列三种类型套接字。
流式套接字(SOCK_STREAM):
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。内设流量控
制,避免数据流超限;数据被看作是字节流,无长度限制。文件传送协议(FTP)即使用流式套接字。 


数据报式套接字(SOCK_DGRAM):
提供了一个无连接服务(UDP)。数据包以独立包形式被发送,不提供无错保证,
数据可能丢失或重复,并且接收顺序混乱。网络文件系统(NFS)使用数据报式套接字。 


原始式套接字(SOCK_RAW) :
该接口允许对较低层协议,如IP、ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。
--------------------------------------------------------------------------------------------


mysql -h 192.168.0.201 -P 3306 -u root -p123


-------------------------------
后台运行
nohup ./server.o
查看进程
ps -e
重启服务器自动运行服务端软件
vim /etc/rc.local
#启动服务端登录程序
nohup /mnt/xvdb/Work/udpSocket/server.o &


开机自动挂载硬盘
vim /etc/fstab
/dev/xvdb /mnt/xvdb ext4 defaults 0 0


用文件锁实现,创建一个锁文件,但程序启动时并不是判断此文件是否存在,而是判断此文件某个区域是否已加锁,进程结束后,跟文件描述符一样,锁会自动释放




 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

气杀也么哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值