Thứ Sáu, 6 tháng 9, 2013

Cài đặt PHP OCI8 + PDO_OCI (instantclient 12.1) module

Trường hợp: cài máy chạy php không nằm trên máy cài oracle
PHP5.3.27

PHP OCI8
Bước 1: Download mấy cái file instantclient Link
Lưu ý: kiểm tra xem OS là x86 hay x86_64, nếu down sai thì sẽ có lỗi

unzip instantclient-basic-linux-12.1.0.1.0.zip
unzip instantclient-odbc-linux-12.1.0.1.0.zip
unzip instantclient-sdk-linux-12.1.0.1.0.zip
Giải nén ra (các file sẽ nằm cùng một thư mục vd: /usr/local/src/instantclient_12_1)

cd vào mấy con vẹo
ln -s libclntsh.so.*.1 libclntsh.so
(với * là 10,11,12.. vv)

Bước 2: cài đặt OCI8
Download oci8: Link (vd: oci8-1.4.10.tgz)

tar xvzf oci8-1.4.10.tgz
/usr/local/php5/bin/phpize
./configure --with-oci8=instantclient,/usr/local/src/instantclient_12_1 --with-php-config=/usr/local/php5/bin/php-config
make && make install

Bước 3: cấu hình php.ini thêm
extension=oci8.so

PDO_OCI
fix erorr: 
1. checking for oci.h... /x/x/x/x/include
configure: error: I'm too dumb to figure out where the libraries are in your instant client install
2. configure: error: Unsupported Oracle version!


Bước 1: Download pdo_oci link
Bước 2: giải nén tar xvzf PDO_OCI-1.0.tgz
Bước 3: download config.mp4 patch: link
Bước 4: sửa config.m4 (để chạy với instantclient 12.1)
tìm line: SUPPORTED_LIB_VERS="9.0 10.1 11.1"  # This caters for all Oracle 9.x, 10.x and 11.1 installs
-> thêm: SUPPORTED_LIB_VERS="9.0 10.1 11.1 12.1"  # This caters for all Oracle 9.x, 10.x and 11.1 installs

tìm line: case $PDO_OCI_VERSION in
    9.0|10.1|10.2|11.1|11.2)
-> thêm: case $PDO_OCI_VERSION in
    9.0|10.1|10.2|11.1|11.2|12.1)


Bước 5: Cài đặt
 /usr/local/php5/bin/phpize
./configure --with-pdo-oci=instantclient,/usr/local/src/instantclient_12_1,12.1 --with-php-config=/usr/local/php5/bin/php-config
make && make install

Bước 6: Enable module, thêm vào php.ini
; Enable pdo_oci (oracle) extension module
extension=pdo_oci.so



REFERENCE:
ORACLE: http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html
OCI8: http://www.php.net/manual/en/oci8.installation.php
PDO_OCI config.mp4 patch: http://svn.php.net/viewvc?view=revision&revision=294487
PDO_OCI manual: http://php.net/manual/en/ref.pdo-oci.php
PDO_OCI v1.0 download: http://pecl.php.net/package/PDO_OCI

Thứ Hai, 26 tháng 8, 2013

[Syslog-ng] The BSD syslog Protocol

The BSD syslog Protocol

Cấu trúc một đoạn tin có 3 phần PRI, HEADER, MSG
Mỗi gói tin có độ dài: 1024 bytes hoặc nhỏ hơn

PRI: phải có 3, 4, hoặc 5 ký tự và phải nằm trong "<" và ">" (mã ASCII là: %d60 và %d62)
Đại diện cho Facility và Severity theo công thức: Facility*8 + Severity

           Table 1.  syslog Message Facilities
        Numerical         Severity
          Code
0 kernel messages 1 user-level messages 2 mail system 3 system daemons 4 security/authorization messages (note 1)
           5             messages generated internally by syslogd
           6             line printer subsystem
           7             network news subsystem
           8             UUCP subsystem
           9             clock daemon (note 2)
          10             security/authorization messages (note 1)
          11             FTP daemon
          12             NTP subsystem
          13             log audit (note 1)
          14             log alert (note 1)
          15             clock daemon (note 2)
          16             local use 0  (local0)
          17             local use 1  (local1)
          18             local use 2  (local2)
          19             local use 3  (local3)
          20             local use 4  (local4)
          21             local use 5  (local5)
          22             local use 6  (local6)
          23             local use 7  (local7)

           Table 2. syslog Message Severities

        Numerical         Severity
          Code

           0       Emergency: system is unusable
           1       Alert: action must be taken immediately
           2       Critical: critical conditions
           3       Error: error conditions
           4       Warning: warning conditions
           5       Notice: normal but significant condition
           6       Informational: informational messages
           7       Debug: debug-level messages

HEADER: Lưu thời gian (timestamp), hostname hoặc IP của thiết bị. Giá trị gồm ký tự chuẩn ASCII giống phần PRI (%d33-126) và dấu cách (%d32).
- Trường TIMESTAMP nằm sau dấu ">" của phần PRI, lưu thời gian theo định dạng "Mmm dd hh:mm:ss". Trong đó Mmm là viết tắt của tháng: 
         Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
dd là ngày trong tháng, nếu ngày <10 thì dd gồm dấu cách và số. vd: ngày 7 tháng 8 sẽ được viết là "Aug  7" với 2 dấu cách.
hh:mm:ss là thời gian cục bộ. hh hiển thị theo định dạng 24 giờ (giá trị 00 -> 23). Phút (mm) và giây (ss) có giá trị 00 -> 59
- Trường HOSTNAME lưu tên máy chủ, hoặc IP (v4 hoặc v6) của nơi gửi log. Giá trị ưu tiên là tên máy chủ, được quy định theo chuẩn STD 13. Lưu ý, trong trường này không được phép có dấu cách (space). Không đi kèm tên miền với trường hostname. Tiếp sau trường HOSTNAME là một dấu cách (space)

MGS: Lưu phần còn lại của gói tin syslog. Gia trị gồm ký tự chuẩn ASCII (%d33-126) và dấu cách (%d32).
Bao gồm 2 trường: TAG và CONTENT. Trong đó CONTENT là nội dung chi tiết của đoạn thông điệp. Phần TAG không quá 32 ký tự, bất kỳ ký tự không trong bảng chữ cái đều là ký tự đánh dấu kết thúc phần TAG. Phần lớn, ký tự đầu tiên của phần CONTENT gồm ký tự "[", ":", hoặc dấu cách.

4.2 Nguyên bản của gói tin syslog
Không có yêu cầu cụ thể nào về nội dung của gói tin syslog. Bất kỳ gói tin nào có đích là cổng 514 UDP đều hợp lệ nếu có đúng định dạng của syslog.



Thứ Sáu, 19 tháng 7, 2013

Duplicate database from active database

Giới thiệu
Nhân bản csdl là cách sử dụng lệnh DUPLICATE để lưu toàn bộ dữ liệu của csdl nguồn. Hoạt động của csdl đích toàn toàn độc lập với nguồn.

Mục đích
Kiểm tra phương thức backup & recovery, kiểm thử bản update mới của Oracle, kiểm tra hiệu suất csdl, tạo mới standby database (dataGuard), sinh báo cáo.

Khái niệm cơ bản
Source host là máy chứa csdl gốc. Source database instance là instance tương ứng với csdl gốc.
Destination host là máy chứa csdl được nhân bản. Source host và destination host có thể cũng hoặc khác máy chủ. Instance tương ứng với csdl đích được gọi là auxiliary instance.

Kỹ thuật nhân bản csdl
Để nhân đôi database RMAN cung cấp hai cách căn bản: nhân bản trực tiếp từ csdl đang hoạt động và qua backup.


Duplicate database from active database

Thứ Tư, 10 tháng 7, 2013

ORACLE NET Service

Khái niệm


Instance: Mỗi csdl có ít nhất một Instance, một Instance bao gồm vùng bộ nhớ (GSA) và các tiến trình xử lý nền. Mỗi instance được xác định bởi một Instance Name (theo hình: sales và finance là tên 2 instance).

  • Instance Name: được chỉ định bởi tham số khởi tạo INSTANCE_NAME, mặc định có giá trị giống với SID (Oracle system identifier) 

Database service: Đối với client một csdl Oracle được hiểu là một dịch vụ (service). Một csdl có thể có nhiều dịch vụ. (theo hình: Có 2 csdl với 2 dịch vụ phục vụ nhóm Sale và Finance). Mỗi csdl được xác định bởi một Service Name.

  • Service name: Là đại diện mức logic của một csdl. Khi một Instance khởi động, nó sẽ đăng ký với listener để sử dụng một hoặc nhiều Service Name.
    Một Service Name có thể định danh nhiều Instance, một Instance chứa nhiều service. Do đó Listener đóng vai trò như phương tiện giữa client - Instance và định tuyến yêu cầu kết nối đến đúng Instance.
Password File Authentication
Tạo file password: ORAPWD FILE=filenameENTRIES=max_users
- Khi dùng Database Configuration Assitant để tạo csdl, nó sẽ tạo file password.
- Kể từ Oracle 11gR1, password phân biệt chữ hoa chữ thường trừ khi chọn IGNORECASE=Y
Đặt tham số khởi tạo REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE (Deafault) - Khi thay đổi tham số phải khởi động lại csdl.
Kết nối đến database bằng user SYS (Hoặc user có quyền quản trị)
Nếu user không tồn tại, tạo một user và gán password cho user đó. Mật khẩu phân biệt chữ hoa chữ thường, hoặc ta có thể đặt tham số khởi tạo như sau: SEC_CASE_SENSITIVE_LOGON = FALSE
Gán quyền SYSDBA hoặc SYSOPER cho user: GRANT SYSDBA to <user>;

Tạo file password bằng ORAPWD
Syntax: ORAPWD FILE=filename [ENTRIES=numuser] [FORCE=(Y|N)] [IGNORECASE=(Y|N)]
Không có dấu cách trước và sau ký tự (=)
Lệnh sẽ hiển thị dấu nhắc ghõ mật khẩu của user SYS
  • FILE: tên của password file
    • Yêu cầu về tên file và đường dẫn đối với LINUX/UNIX
      • Tên file: orapwORACLE_SID
      • Đường dẫn: ORACLE_HOME/dbs
  • ENTRIES: Số lượng tối đa tài khoản được lưu trong file
    • Số lượng tài khoản tươnwg ứng với số lượng người dùng được phép kết nối đến database bằng quyền SYSDBA hay SYSOPER. Số lượng bản ghi trong file có thể nhiều hơn số lượng user, vì ORAPWD tiếp tục gán bản ghi cho đến khi OS block được làm đầy. VD: nếu OS block là 512 bytes, nó sẽ lưu giữ 4 bản ghi.số lượng bản ghi luôn luôn chia hết cho 4.
    • Các bản ghi có thể được tái sử dụng qua việc gán và thu hồi quyền
  • FORCE: Cho phép ghi đè file đã tồn tại (y)
    • Tham số nếu được gán (y) sẽ ghi đè file đã tồn tại. Nếu (n) một lỗi báo file đã tồn tại sẽ được trả về.
  • IGNORECASE: Mật khẩu phân biệt chữ hoa chữ thường. (y)
Chia sẻ và tắt file password
Sử dụng tham số khởi tạo REMOTE_LOGIN_PASSWORDFILE để kiểm soát việc chia sẻ giữa các Instance. Các giá trị như sau:

  • NONE: Không cho phép kết nối không an toàn đến csdl.
  • EXCLUSIVE (default): Sử dụng với một Instance của một csdl. File có thể được thay đổi, cho phép thêm, sửa, xóa user. Ngoài ra nó còn cho phép thay đổi mật khẩu của SYS qua lệnh ALTER USER
  • SHARE: Sử dụng trên nhiều csdl chạy trên cùng server, hoặc trên nhiều Instance của một csdl RAC. File không cho phép thay đổi, nếu muốn thay đổi thì chuyển về EXCLUSIVE sau đó đổi về SHARE.
Đồng bộ mật khẩu

  • Nếu thay đổi tham số khởi tạo REMOTE_LOGIN_PASSWORDFILE từ NONE sang EXCLUSIVE hay SHARED, hoặc tạo lại file mật khẩu và thay đổi mật khẩu của SYS, thì ta phải đảm bảo mật khẩu trong từ điển và trong file password giống nhau.
  • Để đồng bộ mật khẩu SYS, sử dụng lệnh ALTER USER, lệnh sẽ cập nhật và đồng bộ mật khẩu.
  • Để đồng bộ mật khẩu của các user khác, đăng nhập sử dụng quyền SYSDBA hoặc SYSOPER, thu hồi và gán lại quyền cho những user này:
    1. Tìm tất cả user được gán quyền SYSDBA
      SELECT USERNAME FROM V$PWFILE_USERS WHERE USERNAME != 'SYS' AND SYSDBA='TRUE';
    2. Thu hồi quyền và gán lại quyền SYSDBA cho những user này
      REVOKE SYSDBA FROM non-SYS-user;
      GRANT SYSDBA TO non-SYS-user
    3. Tìm tất cả user được gán quyền SYSOPER
      SELECT USERNAME FROM V$PWFILE_USERS WHERE USERNAME != 'SYS' AND SYSOPER='TRUE';
    4. Thu hồi quyền và gán lại quyền SYSOPERcho những user này
      REVOKE SYSOPER FROM non-SYS-user;
      GRANT SYSOPER TO non-SYS-user;
Thêm user vào file password
Khi được gán quyền SYSDBA hay SYSOPER, user đó sẽ được lưu trong file password. Nếu server không đặt EXCLUSIVE (hoặc file password bị xóa) thì lỗi sẽ được trả về khi gán quyền. User sẽ được lưu trong file passowrd khi tồn tại một trong 2 quyền trên.
Tạo file password và thêm user

  1. Tạo file password với công cụ ORAPWD
  2. Đặt biến khởi tạo REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE (default là thế, đặt xong phải restart database)
  3. Kết nối đến csdl bằng quyền SYSDBA
    CONNECT SYS AS SYSDBA;
  4. Khởi động csdl
  5. Tạo user và gán 1 trong 2 quyền SYSDBA hoặc SYSOPER
Gán và thu hồi quyền SYSDBA và SYSOPER

Vì SYSDBA và SYSOPER là hai quyền lớn, nên WITH ADMIN OPTION không được sử dụng trong lệnh GRANT. Do đó user được gán quyền (Grantee) sẽ không có quyền gán quyền này cho user khác.Các quyền này không thể gán cho chức năng (role), bởi vì role chỉ có tác dụng khi csdl được khởi động. Không nên đồng hóa quyền SYSDBA và SYSOPER với quyền OS. (Đọc thêm Security Guide)
Xem thông tin user trong Password File
Sử dụng View V$PWFILE_USERS để xem user nào được gán quyền SYSDBA, SYSOPER hay SYSASM. Các cột và mô tả:

  • USERNAME: tên user
  • SYSDBA: nếu giá trị TRUE, user có thể kết nối với quyền SYSDBA
  • SYSOPER: nếu giá trị TRUE, user có thể kết nối với quyền SYSOPER
  • SYSASM: nếu giá trị TRUE, user có thể kết nối với quyền SYSASM
Duy trì file password
Mở rộng số lượng bản ghi trong file password: Khi có lỗi trả về khi gán quyền SYSDBA hay SYSOPER cho user, thì lỗi đó là do file password bị đầy. Ta cần tạo một file lớn hơn và gán lại quyền cho các user.
  • Thay thế file password
    1. Xác định những user có quyền SYSDBA hoặc SYSOPER bằng cách truy vấn view V$PWFILE_USERS
    2. Xóa file password hiện tại.
    3. Tạo file password mới, xác định tham số ENTRIES lớn hơn hiện tại.
    4. Thêm user vào file password.
  • Xóa file password
    • Nếu xác định không cần dùng tới file password để xác thực, ta có thể xóa file đó và khởi tạo lại tham số REMOTE_LOGIN_PASSWORDFILE=NONE. Sau khi xóa file, chỉ những user có quyền xác thực bằng OS mới có khả năng sử dụng quyền thực thi của SYSDBA hay SYSOPER.


Chủ Nhật, 5 tháng 5, 2013

CÀI ĐẶT SKYPE 4.0 TRÊN CENTOS 6.4



CÀI ĐẶT SKYPE TRÊN CENTOS 6.4
INFO
OS
Linux cent6 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
Skype 4.0
http://download.skype.com/linux/skype_static-4.0.0.8.tar.bz2
INSTALL
Tải Skype 4.0
cd /mnt
wget http://download.skype.com/linux/skype_static-4.0.0.8.tar.bz2
Giải nén
tar xvjf  /mnt/skype_static-4.0.0.8.tar.bz2
cp -rp /mnt/skype_static-4.0.0.8 /usr/share/
ln -s  /usr/share/skype_static-4.0.0.8 /usr/share/skype
cp /usr/share/skype/skype /usr/bin/
Cài các gói requirement
yum install alsa-lib.i686 fontconfig.i686 freetype.i686 glib2.i686 libSM.i686 libXScrnSaver.i686 libXi.i686 libXrandr.i686 libXrender.i686 libXv.i686 libstdc++.i686 pulseaudio-libs.i686 qt.i686 qt-x11.i686 zlib.i686 -y
Tạo symlink cho lib
ln -s /usr/lib/libtiff.so.3 /usr/lib/libtiff.so.4
Tạo Icon trên desktop
ln -s /usr/share/skype/skype.desktop ~/Desktop/skype.desktop
Thay logo: sửa /usr/share/skype/skype.desktop
Icon=/usr/share/skype/icons/SkypeBlue_48x48.png

REFERENCE
https://support.skype.com/en/faq/FA12120/getting-started-with-skype-for-linux#2.5
http://www.if-not-true-then-false.com/2012/install-skype-on-fedora-centos-red-hat-rhel-scientific-linux-sl/

Thứ Năm, 2 tháng 5, 2013

Khi tôi trúng tuyển vào VC :/


TRONG MẮT BA MẸ, BẠN GÁI,...

VC là công ty làm về Internet!!! 

TRONG MẮT HÀNG XÓM LÁNG GIỀNG

À thì ra là phóng viên Dân Trí 

TRONG MẮT ĐỒNG NGHIỆP


Nào chúng mình cùng đi giải cứu thế giới



 TRONG MẮT SẾP


Anh vừa tuyển được một thằng hay lắm... 



TRONG MẮT NHÂN VIÊN BẢO VỆ TÒA NHÀ


Anh ơi cho em xem thẻ... 


TRONG MẮT CÔNG TY HR


Phải săn được chú này về... 



TRONG MẮT BẠN BÈ NGOÀI CÔNG TY


10h mới thấy nó vác mặt ra đường, FB cả ngày, tối lại rủ nhau đi nhậu... 



CÒN ĐÂY LÀ THỰC TẾ PHŨ PHÀNG





(Chuẩn CMNR)
(source: VC)

Thứ Sáu, 12 tháng 4, 2013

Congestion Avoidance and Control - V. Jacobson

(Bài dịch)


Giới thiệu
Mạng máy tính đã trải qua thời kỳ phát triển bùng nổ trong vài năm gần đây kèm theo đó nhiều vấn đề về tắc nghẽn. Một ví dụ, ta thường thấy cổng mạng hủy 10% gói tin đến vì tràn bộ đệm. Bản điều tra của chúng tôi về các vấn đề này sẽ đưa ra nhiều nguyên nhân nằm trên cách triển khai tầng giao vận (Transport protocol) (chứ không phải chính các giao thức đó). Cách rõ ràng để thực thi một giao thức truyền tải dựa trên cửa sổ (window-based transport protocol) có thể chính xác gây ra phản ứng sai làm tắc nghẽn mạng. Chúng tôi xin đưa ra các ví dụ về phản ứng sai và mô tả một số thuật toán đơn giản để khắc phục tình trạng này. Các thuật toán được bắt nguồn từ ý tưởng đạt được độ tinh cậy của mạng bằng cách buộc cái kết nối ở tầng giao vận tuân theo nguyên tắc 'bảo toàn gói' (packet conservation). Chúng tôi sẽ đưa ra thuật toán xuất phát từ nguyên tắc này và hiệu quả mang lại cho đường truyền trong mạng đang sảy ra tắc nghẽn.
Vào tháng 10 năm 1986, mạng Internet lần đầu tiên trở thành một phần của sự sụp đổ vì tắc nghẽn. Trong thời gian này, Thông lượng từ LBL đến UC Berkeley (các vùng cách nhau 400 thước và 2 hốp IMP) bị rớt từ 32Kbps về 40 bps. Chúng tôi bị mê hoặc bởi hàng ngàn các yếu tố gây nên rớt băng thông và bị thu hút vào một cuộc điều tra về sự việc này. Trong thực tế, chúng tôi băn khoăn nếu 4.3BSD (Berkeley UNIX ) TCP thiếu các phản ứng hoặc nó có thể được điều chỉnh để làm việc tốt hơn trong điều kiện mạng tệ hại. Và câu trả lời đều là "YEAH!"

GETTING TO EQUILIBRIUM: SLOW-START 2
Trong thời gian này, chúng tôi đã triển khai 7 thuật toán vào gói giao thức 4BSD TCP:

(i)                 round-trip-time variance estimation
(ii)               exponential retransmit timer backoff
(iii)             slow-start
(iv)             more aggressive receiver ack policy
(v)               dynamic window sizing on congestion
(vi)             Karn’s clamped retransmit backoff
(vii)           fast retransmit

Cách tính toán và các bản báo cáo của bước test bản beta cho thấy sản phẩn cuối cùng khá là tốt trong việc xử lý với các điều kiện tắc nghẽn của mạng. Bài bào này là một bản mô tả tóm tắt từ 1-5 và nguồn gốc sau chúng. Thuật toán thứ 6 được phát triển bởi Phil Karn tại Bell Communications Research được mô tả trong mục [16]. Thuật toán thứ 7 sẽ được mô tả sớm trong xuất bản tại RFC.




Thuật toán 1-5 xuất phát từ việc theo dõi: Luồng trên một kết nối (ISO TP-4 hoặc XeroxNS SPP) cần phải tuân theo nguyên tắc 'bảo toàn gói' (packet conservation). Và nếu nguyên tắc được tuân theo, sự sụp đổ do tắc nghẽn sẽ trở thành ngoại lệ hơn là các luật. Thêm nữa, việc điều khiển tắc nghẽn còn bao gồm cả việc tìm kiếm nơi vi phạm việc bảo toàn và sửa chúng. Thuật ngữ 'bảo toàn gói' tương đương với một kết nối cân bằng. Ví dụ như chạy ổn định với trường window cao nhất của gói tin trong việc vận chuyển, lưu lượng của gói thuật ngữ vật lý gọi nó là bảo toàn khi: Một gói mới không được truyền trước khi gói cũ được gửi. Nguyên lý của dòng dữ liệu yêu cầu hệ thống với những thuộc tính trên phải mạnh khi đối mặt với tình trạng tắc nghẽn.
Có 3 khả năng phá vỡ bảo toàn gói:
1.      Kết nối không đạt đến trạng thái cân bằng
2.      Thiết bị gửi thêm một gói trước khi gói cũ được truyền xong
3.      Không thể đạt được trạng thái cân bằng vì giới hạn tài nguyên trên đường truyền.
Trong phần sau đây, chúng tôi sẽ tìm cách xử lý tối ưu tránh những khả năng trên.
  
 
Trong phần sau đây, chúng tôi sẽ tìm cách xử lý tối ưu tránh những khả năng trên.
Getting to Equilibrium: Slow-start
Lỗi [1] xuất phát từ một kết nối đang  bắt đầu hoặc thử kết nối lại sau khi mất một gói tin. Nói cách khác tính bảo toàn là việc thiết bị gửi sử dụng biên nhận ACKs như một chiếc đồng hồ thăm dò để gửi gói tin mới. Kể từ khi thết bị nhận có thể sinh các ACK không nhanh hơn gói tin đi qua mạng, giao thức gọi là ‘tự đếm thời gian' (Hình 1). Hệ thống đồng hồ tự đếm tự động điều chỉnh theo mức tăng giảm băng thông và độ trễ và có một khoảng động rộng (giả sử TCP mở rộng dải từ 800 Mbs kênh Cray đến 1200 bps gói liên kết). Nhưng điều tương tự làm hệ thống tự đếm thời gian ổn định khi nó chạy từ từ - để nhận dữ liệu phải có biên nhận để đếm thời gian các gói nhưng để nhận được biên nhận ACK thì phải có dòng dữ liệu.
Sender: Thiết bị gửi
Receiver: Thiết bị nhận
Pb: biểu thị khoảng cách nhỏ nhất của gói trong phần liên kết chậm nhất của đường mạng (nút thắt cổ chai).
Pr: khoảng cách giữa các gói của mạng bên nhận
As: khoảng cách ACK của mạng thiết bị gửi As = Pb
Ab:
Ar: khoảng cách giữa gói ACK tại thiết bị nhận là Ar=Pr=Pb
Đây là cơ chế mô tả của thiết bị gửi/nhận trong một mạng băng thông rộng kết nối với một mạng chậm hơn, mạng đường dài. Thiết bị gửi chỉ bắt đầu và đã truyền đi một gói chứa trường window, liên tiếp nhau. Gói ACK biên nhận cho đợt gửi đầu tiên được gửi trở lại thiết bị gửi (Ký hiệu bằng đường thẳng đứng ở ống to bên trái phía dưới). Chiều dọc là băng thông, chiều ngang là thời gian. Mỗi một khối đen là một gói. Bandwidth_Time = Bits nên kích thước khối đen tương đương với độ lớn của gói. Số bits không thay đổi đóng vai trò như gói tin đi qua mạng do đó gói tin bị nén thành các đường chiếm băng thông trải dài theo trục thời gian. Thời gian Pb biểu thị khoảng cách nhỏ nhất của gói trong phần liên kết chậm nhất của đường mạng (nút thắt cổ chai). Khi gói tin đi ra khỏi nút thắt, khoảng cách các gói tin không thay đổi bởi vậy khoảng cách giữa các gói của mạng bên nhận Pr = Pb. Nếu thời gian xử lý của thiết bị nhận bằng nhau đối với tất cả các gói tin, thì khoảng cách giữa gói ACK tại thiết bị nhận là Ar=Pr=Pb. Nếu các khe thời gian Pb lớn vừa đủ cho một gói, nó sẽ đủ lớn cho gói ACK bởi vậy khoảng cách giữa các gói ACK được bảo toàn xuốt đường trở về. Vì thế nên khoảng cách ACK của mạng thiết bị gửi As = Pb. Vậy, Nếu gói tin sau đợt gửi đầu tiên chỉ được gửi khi nhận gói tin ACK, khoảng cách gói tin của thiết bị gửi sẽ bằng chính xác thời gian gói tin tại liên kết chậm nhất của đường mạng.
Để bắt đầu đếm, chúng tôi đã phát triển thuật toán slow-start để dần dần tăng lượng dữ liệu truyền đi[2]. Mặc dù chúng tôi hy vọng bằng việc thiết kế như vậy giải thuật sẽ tinh vi hơn, nhưng việc triển khai thì thật đơn giản - Một biến trạng thái mới và 3 dòng code trong thiết bị gửi.


[1] Một luồng cân bằng có nghĩa là bất kỳ thời điểm nào,  Tích phân của mật độ gói tin xung quanh vòng  gửi/nhận/gửi là một hằng số. Từ khi các gói tin truyền quanh vòng lặp này, Tích phân tiếp tục đủ để thành lập hàm Lyapunov của hệ thống. Một hàm hằng số không đáng kể phù hợp với điều kiện ổn định của Lyapunov vì vậy hệ thống đạt trạng thái ổn định và bất kỳ sự chồng chất hệ thống nào đều ổn định. (Xem [3], Chương 11-12 hoặc [21], Chương 9 về định lý hệ thống ổn định)
[2] Slow-start hơi giống với giải thuật CUTE trong [14]. Thời điểm nghĩ ra thuật toán này chúng tôi không hay biết gì về CUTE nhưng sau đó thì có biết - CUTE được đưa ra trước vài tháng. Khi mô tả thuật toán của chúng tôi vào tháng 1 - 1987, tại cuộc họp tại IETF, chúng tôi gọi nó là soft-start. Cái tên slow-start được đề nghị bởi John Nagle trong một thông điệp gửi đến IETF vào tháng 3 - 1987. Cái tên tỏ ra khá rõ ràng và chúng tôi đặt theo nó.