Bắt đầu với NodeJS - Hiểu về TCP/IP , ADRESS/PORT (Phần 7)
I.Protocol (giao thức)
- Hiểu đơn giản nó là một bộ quy tắc mà 2 bên đồng ý sử dụng khi giao tiếp.
=> Cả server và client đều được lập trình để hiểu và sử dụng bộ quy tắc cụ thể đó. Việc này tương tự như tạo ra một ngôn ngữ để những người từ các quốc gia khác nhau dùng ngôn ngữ này để nói chuyện , khá đơn giản phải không ^^ ?
II.TCP/IP
IP : Internet protocol
Chắc hẳn các bạn đã rất quen với mô hình Client - Server
- Client gửi các request lên Server
- Server tiếp nhận và trả về dữ liệu chứa trong các response
- Request và response đều được định dạng theo một chuẩn mà 2 phía đều hiểu được (2 thằng này sẽ thống nhất để trao đổi dữ liệu cho nhau , VD thằng req yêu cầu dữ liệu trả về dạng json mà thằng res trả về kiểu XML là thằng Req ba bửa block thằng Res ngay.
Nhưng bạn có bao giờ thắc mắc , làm thế quần què nào mà thằng Server và thằng Client xác định được nhau trên internet không ? -_- và thông tin được chuyển đi như thế nào ?
Đó là lúc TCP/IP xuất hiện <3.
IP là viết tắt cho cụm từ Internet protocol
Đi sâu vào mô hình Client-Server này chúng ta sẽ thấy vài điều cơ bản
- Mỗi máy tính được gán một địa chỉ IP (duy nhất) dùng để xác định địa chỉ của máy đó trên Internet
- Như vậy muốn định danh trên Internet chúng ta phải dùng IP , định danh để làm gì ?? để các máy tính có thể kết nối được với nhau (xác định)
- Còn một điểm quan trọng nữa khi 2 máy kết nối với nhau đồng nghĩa chúng đã đồng ý giao tiếp qua một chuẩn chung.
- Khi 2 máy kết nối với nhau , HĐH sẽ mở một socket và kết nối với máy tính khác.
(Socket là gì ?? socket hiểu đơn giản là nơi thông tin được truyền qua giữa 2 hay nhiều máy tính)
- Bây giờ đến phần quan trọng :
+ Khi Server gửi data , nó sẽ được cấu trúc trong loại prototol của riêng nó.(HTTP,FTP...=> đây là các) VD :Khi Server dùng Http (HyperText Transfer Protocol)
để cấu trúc data được gửi đi
+ Không chỉ nói về cách thông tin được cấu trúc (để lúc nhận được thằng Client nó (accept) ) mà còn nói về cách data được gửi đi như thế nào lúc này chúng ta cần đến thằng TCP
+ TCP là giao thức cho biết dữ liệu sẽ được cấu trúc sau đó được chia ra làm nhiều phần nhỏ rồi gửi qua socket.
- Những mảnh data được cấu hình rồi chia ra để TCP gửi thông qua socket gọi là packet.
=> Một lần nữa nhắc lại , thông tin có trong packet có thể được xác định bởi một giao thức.
+ Hành động chia sẽ liệu ra làm nhiều phần rồi gửi nó thông qua socket là nhiệm vụ của thằng TCP
+ Công việc định danh máy tính là nhiệm vụ của thằng IP nên chúng ta thường thấy 2 thằng này hay đi cùng nhau.
=> Bạn lập trình phía Server và dùng Node , HĐH ở phía server có tất cả những khả năng này nhưng nó cần phải lập trình để sử dụng (giống như bạn có tiềm năng nâng tạ 100KG nhưng bạn cần tập luyện và học hỏi ,bạn có tiềm năng nhưng bạn cần phải được huấn luyện)
Node cung cấp các khả năng truy cập tính năng đó của OS , nó tạo ra socket để kết nối , gửi thông tin qua TCP/IP ,
+ Trong Node chúng ta có thể xác định thông tin mà chúng ta sẽ gửi.
+ Node có thể dùng để lập trình máy chủ ,máy chủ email , máy chủ file (gửi và truy suất tệp)
III.Liên hệ
- Bạn có thể thấp cách thức làm việc của TCP giống cái gì đã học không ?? nó chia dữ liệu làm nhiều phần , gửi qua socket.
=> Cách thức làm việc rất giống với luồng
Trong Node , nó sẽ cho phép xử lý các packet đi theo các pipe
- Bạn cũng có thể nghe đâu đó về Socket rồi ...đối với web thường chúng ta mở và đóng Socket liên tục nhưng đối với websocket chúng ta giữa cho nó kết nối liên tục tới máy tính (đích)
IV: Địa chỉ và cổng.
- Như mình đã trình bày ở trên về cách thức dữ liệu được gửi đi và chia ra , nhưng lại phát sinh một vấn đề ở đây : Dữ liệu được gửi từ Server về Client vậy thì làm sau để biết chương trình nào sẽ nhận được gói dữ liệu này ?????
=> Khi một chương trình được cài vào OS nó sẽ tự động mở một cổng vd như 8080 (duy nhất trên máy tính đó) và một chương trình có thể mở nhiều cổng để nhận vào gửi dữ liệu , nói đúng hơn thì nó lắng nghe xem có dữ liệu đi qua cổng này hay không ?
- Điển hình là Chrome khi cài vào OS nó mở rất nhiều cổng -_- chả biết làm cái của nợ gì.
- Nhìn ngược lại với mô hình Client - Server , Client (điển hình là Browser) gửi request đến Server (Server được xác định qua Domain/IP nhưng trên server đó có thể có rất nhiều phần mềm đang chạy như NodeJS , Email , FTP làm thế nào để dữ liệu từ Client gửi đến NodeJS ??? Chúng ta gán cho NodeJS một cổng có địa chỉ là con số duy nhất trong ảnh này là 443.
Trong ảnh này server có địa chỉ là 78.132.160.4 và thằng NodeJS có khai báo nhận data quả port 443 vậy Client muốn gửi data đến thằng Node chỉ cần khai báo địa chỉ 78.132.160.4:443
=> Thông thường thì chúng ta không viết địa chỉ IP vs PORT như thế kia mà trang web sẽ có domain để ánh sạ đến một địa chỉ IP và PORT . VD google.com là DOMAIN , mình sẽ nói về DOMAIN sau tạm hiểu đơn giản như vậy nhé ^^.
- Hiểu đơn giản nó là một bộ quy tắc mà 2 bên đồng ý sử dụng khi giao tiếp.
=> Cả server và client đều được lập trình để hiểu và sử dụng bộ quy tắc cụ thể đó. Việc này tương tự như tạo ra một ngôn ngữ để những người từ các quốc gia khác nhau dùng ngôn ngữ này để nói chuyện , khá đơn giản phải không ^^ ?
II.TCP/IP
IP : Internet protocol
Chắc hẳn các bạn đã rất quen với mô hình Client - Server
- Client gửi các request lên Server
- Server tiếp nhận và trả về dữ liệu chứa trong các response
- Request và response đều được định dạng theo một chuẩn mà 2 phía đều hiểu được (2 thằng này sẽ thống nhất để trao đổi dữ liệu cho nhau , VD thằng req yêu cầu dữ liệu trả về dạng json mà thằng res trả về kiểu XML là thằng Req ba bửa block thằng Res ngay.
Nhưng bạn có bao giờ thắc mắc , làm thế quần què nào mà thằng Server và thằng Client xác định được nhau trên internet không ? -_- và thông tin được chuyển đi như thế nào ?
Đó là lúc TCP/IP xuất hiện <3.
IP là viết tắt cho cụm từ Internet protocol
Đi sâu vào mô hình Client-Server này chúng ta sẽ thấy vài điều cơ bản
- Mỗi máy tính được gán một địa chỉ IP (duy nhất) dùng để xác định địa chỉ của máy đó trên Internet
- Như vậy muốn định danh trên Internet chúng ta phải dùng IP , định danh để làm gì ?? để các máy tính có thể kết nối được với nhau (xác định)
- Còn một điểm quan trọng nữa khi 2 máy kết nối với nhau đồng nghĩa chúng đã đồng ý giao tiếp qua một chuẩn chung.
- Khi 2 máy kết nối với nhau , HĐH sẽ mở một socket và kết nối với máy tính khác.
(Socket là gì ?? socket hiểu đơn giản là nơi thông tin được truyền qua giữa 2 hay nhiều máy tính)
- Bây giờ đến phần quan trọng :
+ Khi Server gửi data , nó sẽ được cấu trúc trong loại prototol của riêng nó.(HTTP,FTP...=> đây là các) VD :Khi Server dùng Http (HyperText Transfer Protocol)
để cấu trúc data được gửi đi
+ Không chỉ nói về cách thông tin được cấu trúc (để lúc nhận được thằng Client nó (accept) ) mà còn nói về cách data được gửi đi như thế nào lúc này chúng ta cần đến thằng TCP
+ TCP là giao thức cho biết dữ liệu sẽ được cấu trúc sau đó được chia ra làm nhiều phần nhỏ rồi gửi qua socket.
- Những mảnh data được cấu hình rồi chia ra để TCP gửi thông qua socket gọi là packet.
=> Một lần nữa nhắc lại , thông tin có trong packet có thể được xác định bởi một giao thức.
+ Hành động chia sẽ liệu ra làm nhiều phần rồi gửi nó thông qua socket là nhiệm vụ của thằng TCP
+ Công việc định danh máy tính là nhiệm vụ của thằng IP nên chúng ta thường thấy 2 thằng này hay đi cùng nhau.
=> Bạn lập trình phía Server và dùng Node , HĐH ở phía server có tất cả những khả năng này nhưng nó cần phải lập trình để sử dụng (giống như bạn có tiềm năng nâng tạ 100KG nhưng bạn cần tập luyện và học hỏi ,bạn có tiềm năng nhưng bạn cần phải được huấn luyện)
Node cung cấp các khả năng truy cập tính năng đó của OS , nó tạo ra socket để kết nối , gửi thông tin qua TCP/IP ,
+ Trong Node chúng ta có thể xác định thông tin mà chúng ta sẽ gửi.
+ Node có thể dùng để lập trình máy chủ ,máy chủ email , máy chủ file (gửi và truy suất tệp)
III.Liên hệ
- Bạn có thể thấp cách thức làm việc của TCP giống cái gì đã học không ?? nó chia dữ liệu làm nhiều phần , gửi qua socket.
=> Cách thức làm việc rất giống với luồng
Trong Node , nó sẽ cho phép xử lý các packet đi theo các pipe
- Bạn cũng có thể nghe đâu đó về Socket rồi ...đối với web thường chúng ta mở và đóng Socket liên tục nhưng đối với websocket chúng ta giữa cho nó kết nối liên tục tới máy tính (đích)
IV: Địa chỉ và cổng.
- Như mình đã trình bày ở trên về cách thức dữ liệu được gửi đi và chia ra , nhưng lại phát sinh một vấn đề ở đây : Dữ liệu được gửi từ Server về Client vậy thì làm sau để biết chương trình nào sẽ nhận được gói dữ liệu này ?????
=> Khi một chương trình được cài vào OS nó sẽ tự động mở một cổng vd như 8080 (duy nhất trên máy tính đó) và một chương trình có thể mở nhiều cổng để nhận vào gửi dữ liệu , nói đúng hơn thì nó lắng nghe xem có dữ liệu đi qua cổng này hay không ?
- Điển hình là Chrome khi cài vào OS nó mở rất nhiều cổng -_- chả biết làm cái của nợ gì.
- Nhìn ngược lại với mô hình Client - Server , Client (điển hình là Browser) gửi request đến Server (Server được xác định qua Domain/IP nhưng trên server đó có thể có rất nhiều phần mềm đang chạy như NodeJS , Email , FTP làm thế nào để dữ liệu từ Client gửi đến NodeJS ??? Chúng ta gán cho NodeJS một cổng có địa chỉ là con số duy nhất trong ảnh này là 443.
Trong ảnh này server có địa chỉ là 78.132.160.4 và thằng NodeJS có khai báo nhận data quả port 443 vậy Client muốn gửi data đến thằng Node chỉ cần khai báo địa chỉ 78.132.160.4:443
=> Thông thường thì chúng ta không viết địa chỉ IP vs PORT như thế kia mà trang web sẽ có domain để ánh sạ đến một địa chỉ IP và PORT . VD google.com là DOMAIN , mình sẽ nói về DOMAIN sau tạm hiểu đơn giản như vậy nhé ^^.


Nhận xét
Đăng nhận xét