TCP协议可以说已经是IT人耳熟能详的协议,最近在学习socket网络编程时后重新温习一下这个协议,针对一些问题做了一些总结,很多理解可能还不是很准确。

1. 协议是什么?所谓的各种网络协议无非是一种通信标准,就好象两个人要说话,那么我们首先得规定一种语言,是中文还是英文,这样大家才能在接下来的交流中进行顺利的沟通。至于标准的实现是和代码操作系统无关的,具体从逻辑上怎么实现这个协议就是自己操作了,只要遵守协议标准,大家就能顺利的进行通信/交流。

2. 为什么会有协议分层?OSI有七层协议(实际通用操作系统用的五层系统),电信通信网络协议也有多层。以前读书时候总是去背。其实这种问题可以反过来想,如果只有一层,会怎么样,或者我们自己去设计,应该设计几层?首先假设协议不分层,大家可以想象把几层合并在一起会怎么样,那我们可能只是做一个简单的应用层程序,那可能会完成大量的接口通信工作,还得自己去写或者调用路由层,传输层方法,甚至更多。由于有了分层的概念,那么我们每一层有自己相对独立的功能,例如寻找IP地址就交给IP层去完成了。这样大大提高了大家工作效率,每一层开发人员除了关注自己本身功能的开发,只用去关心接口问题了。就好象操作系统同样有分层,驱动,操作系统,应用层。

3.为什么有传输层?同样的逆向方法,如果没有TCP/IP层,应用层程序怎么进行网络通信?我们能够通过IP找到目标,但是却没有办法确定要和那个应用程序通信,或者说没有办法确定和那个进程/线程通信。通过IP+port的方式可以方便的确定要通信的进程。

4. 如何理解协议不同字段对应功能?通过一个wireshark工具的截图我们可以很清楚的看到一个协议其实就是一段编码,至于不同字段功能可以理解在协议设计时候根据设计需求对字段进行分段,并且有严格标准。例如第一个字段(由于是16进制编码,实际是2 bytes)是source port(源端口),他的值是22(十六进制也就是16),也是通用的端口。我们在应用程序编程时候会避开这些通用端口。通过这个我们也可以算出port的范围应该是0~65535(2^16-1)。后表面的一串便面含义我们这可以去查阅相关的协议。

5.什么是TCP中的面向连接?通信中的所谓建立的面向连接,不是真的能建立起一个通道,然后再进行数据传输。对于下层的消息协议来说,都是分段打的包。无非是短时间内两个进程需要在网络上进行高速有效的通信,理解为面向连接的通信。如何才能保证高效有效的通信,除了光知道IP地址肯定不行,还需要一系列的机制来保证这个通信。为了知道对方更多的信息以及双方约定一些通信规则,于是在正式传送前肯定需要一个通信,双方约定一些通信规则,这个通信过程可以理解成连接的建立。通信活动结束后,不能让进程还占着资源啊,所以还的释放,这个可以理解成连接的释放或者断开。

6. 什么是socket 编程?因为底层和传输层通常已经封装在驱动程序和操作系统里面了,我们再上层应用程序编程编程时候不必再去重写像TCP/UDP这一类传输层的东西,当然也可以去修改。上层应用程序只需要调用一些方法就可以完成网络通信,在Unix一类的由c语言构成的操作系统来说,一般封装在socket的方法里。在这个基础上进行的网络编程称为套接字编程。

关于网络协议和socket编程基本概念的更多相关文章

  1. C语言小项目-基于TCP协议和SOCKET编程的网络通信系统

    1.1 功能结构图   网络通信系统一共由4个模块组成,分别是点对点客户端.点对点服务端.服务器中转服务端.服务器中转客户端.这4个模块是成对使用的,点对点客户端和点对点服务端一起使用,服务器中转服务 ...

  2. 四层协议和Socket编程

    <四层协议图> <Soclet编程模型图>

  3. TCP协议和socket API 学习笔记

    本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类:  原文地址:TCP协议和socket API 学习笔记 作者:gilb ...

  4. 网络协议 11 - Socket 编程(下):眼见为实耳听为虚

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

  5. Http TCP/IP协议和socket之间的区别和联系

    总结,TCP/IP是传输层协议,主要解决数据如何在网路中传输,socket是TCP/IP协议的具体实现,是对TCP/IP协议的封装和应用,属于程序员层面,HTTP是应用层协议,应用层协议很多,类似的像 ...

  6. TCP/IP协议和socket

    1.传输层基于tcp协议的三次握手和四次挥手? 传输层有两种数据传输协议,分别为TCP协议和UDP协议,其中TCP协议为可靠传输,数据包没有长度设置,理论可以无限长,而UDP协议为不可靠传输,报头一共 ...

  7. java网络编程之Socket编程

    概念 网络编程分为BIO(传统IO).NIO.AIO.Socket编程属于BIO这种传统IO. InetAddress java.net.InetAddress是JAVA中管理IP地址的类,常用 pu ...

  8. linux网络编程之socket编程(一)

    今天开始,继续来学习linux编程,这次主要是研究下linux下的网络编程,而网络编程中最基本的需从socket编程开始,下面正式开始学习: 什么是socket: 在学习套接口之前,先要回顾一下Tcp ...

  9. 网络协议 10 - Socket 编程(上):实践是检验真理的唯一标准

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

随机推荐

  1. USB class总结

    以下是总结的USB的类,不同的USB类,主机询问的描述符格式和内容都不一样,具体的descriptor的内容可以查看 USB spec(http://www.usb.org/home/),如HID的s ...

  2. keil C51 指针总结

    变量就是一种在程序执行过程中其值能不断变化的量.要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间.定义一个变量的格式如下: [存储种 ...

  3. mysql update语句

    UPDATE ClientBankInfo SET status = 3 WHERE sn IN (SELECT sn FROM zjzc.ClientBankInfo WHERE cardNo IN ...

  4. 2014元旦第1周三新的尝试&爬山丢失望远镜

    2014元旦在早起中开始,起来后看了<逃出你的肖申克>系列文章,没有精度只是选择了里面的关键语句和方法论,没有多少意外的收获.然后看了些java系列文章,关于jvm参数配置.运行监控及性能 ...

  5. codecomb 2100【警察叔叔就是这个人!】

    题目背景 十个地方十人十色 全部都是猥琐大叔 这里也是那里也是 行踪可疑 现如今hentai横行,警察叔叔们不得不采取特♂殊手段惩戒这些家伙 题目描述 魅力之都是一个有N个路口,M条双向道路连接的城市 ...

  6. UVA 10047-The Monocycle(队列bfs+保存4种状态)

    题意:给你一张地图,S代表起点,T代表终点,有一个轮盘,轮盘平均分成5份,每往前走一格恰好转1/5,轮盘只能往前进,但可以向左右转90°,每走一步或是向左向右转90° 要花费1单位的时间,问最少的时间 ...

  7. 为啥NSString的属性要用copy而不用retain

    之前学习生活中,知道NSString的属性要用copy而不用retain,可是不知道为啥,这两天我研究了一下,然后最终明确了. 详细原因是由于用copy比用retain安全,当是NSString的时候 ...

  8. Elasticlunr.js 简单介绍

    Elasticlunr.js 项目地址:http://elasticlunr.com/ 代码地址:https://github.com/weixsong/elasticlunr.js 文档地址:htt ...

  9. zabbix安装及配置(rpm包安装mysql,php,apache,zabbix)

    zabbix安装及配置 一.安装mysql.php.apache.zabbix 安装环境: 操作系统:rhel6.3-x86-64  mysql:5.6.23   --官网下载rpm包安装php:5. ...

  10. sshd安全性能优化

    sshd服务是远程登录服务,默认端口为22,对于其优化一是为了增加服务器的安全,避免暴力破解:二是为了加快速度连接,减少不必要的带宽的浪费. sshd服务的配置文件为/etc/ssh/sshd_con ...