Effective TCP/IP

 TCP.bmp

 

목차


  1. 연결지향 프로토콜과 비연결지향 프로토콜의 차이점을 이해하라
  2. 서브넷과 CIDR을 이해하라
  3. 사설 주소와 NAT를 이해하라
  4. 애플리케이션 "골격"을 개발하고 사용하라
  5. XTI/TLI보다 소켓 인터페이스를 사용하라
  6. TCP가 스트림 프로토콜이라는 것을 기억하라
  7. TCP의 성능을 과소평가하지 말라
  8. TCP를 재수정하는 것을 피하라
  9. TCP는 신뢰성 있는 프로토콜이지만 결함이 없는 프로토콜은 아니라는 것을 알아야 한다
  10. TCP/IP는 연결 닫기 정보를 통보하지 않는다는 점을 기억하라
  11. 상대측에서 발생할 수 있는 의외의 행동에 대비하라
  12. 성공적인 LAN 전략이 WAN에도 적용될 것이라고 생각하지 말라
  13. 프로토콜이 어떻게 동작하는지를 배워라
  14. OSI 7 계층을 너무 심각하게 받아들이지 말라
  15. TCP의 쓰기 작업을 이해하라
  16. 올바른 순서의 TCP 릴리스 작업을 이해하라
  17. inetd가 애플리케이션을 시작하게 하는 것을 생각해 보라
  18. tcpmux가 서버이 잘 알려진 포트를 "할당"하도록 하는 것에 대해 고려하라
  19. 두 개의 TCP 연결 사용을 고려하라
  20. 이벤트 드리븐 기능을 가진 애플리케이션의 제작을 고려하라(1)
  21. 이벤트 드리븐 기능을 가진 애플리케이션의 제작을 고려하라(2)
  22. 연결을 닫기 위해 TIME-WAIT 정보 사용을 폐기하지 말라
  23. 서버는 SO_REUSEADDR 옵션을 설정해야 한다
  24. 가능하면 조금씩 여러 번 보내지 말고 한번에 많이 보내라
  25. connect 호출을 타임아웃하는 방법을 이해하라
  26. 데이터의 복사를 피하라
  27. 사용 전에 sockaddr_in 구조를 0으로 설정하라
  28. 바이트 저장 순서에 관한 것을 잊지 말라
  29. 애플리케이션 내에 고정 IP 주소와 포트 번호를 사용하지 말라
  30. connected UDP 소켓을 이해하라
  31. TCP/IP 프로그래밍에 C가 전부가 아니라는 것을 기억하라
  32. 버퍼 크기의 효율성을 이해하라
  33. ping 유틸리티와 친숙해져라
  34. tcpdump나 유사한 도구의 사용법을 배워라
  35. traceroute의 사용법을 배워라
  36. ttcp 사용법을 배워라
  37. lsof 사용법을 배워라
  38. netstat 사용법을 배워라
  39. 시스템 호출 추적 도구의 사용법을 배워라
  40. ICMP 메시지를 캡처하기 위한 도구를 제작하고 사용하라
  41. Stevens를 읽어라
  42. 코드를 읽어라

 

  

연결지향 프로토콜과 비연결지향 프로토콜의 차이점을 이해하라#

 

 

 

서브넷과 CIDR을 이해하라#

 

 

 

사설 주소와 NAT를 이해하라#

 

 

 

애플리케이션 "골격"을 개발하고 사용하라#

 

 

 

XTI/TLI보다 소켓 인터페이스를 사용하라#

 

 

 

TCP가 스트림 프로토콜이라는 것을 기억하라#

네트워크 프로그래머가 범할 수 있는 가장 흔한 오류 중 하나는 TCP가 레코드 경계의 개념이 없는 바이트 스트림을 전달하는 것을 이해하지 못하는 것이다. TCP는 사용자가 볼 수 있는 "패킷"의 개념을 가지고 있지 않다고 언급함으로써 우리는 이런 중요한 사실을 요약할 수 있다. TCP는 단순히 바이트의 스트림을 전달할 뿐이고, 우리는 각각의 읽기에서 얼마나 많이 읽혀졌는지를 확실히 예측할 수 없다. 주어진 읽기에 대해 반환되는 데이터의 양은 예측할 수 없기 때문에, 애플리케이션이 이를 다룰 수 있도록 준비해야 한다.

가장 간단한 경우는 고정길이 메시지이다. 이런 경우는 메시지로 고정된 수의 바이트를 읽으면 된다.

가변길이의 메시지를 지원해야 하는 애플리케이션의 경우, 사용 가능한 두 가지 방법이 있다. 첫 번째 방법은, 레코드들이 EOR(end-of-record)표시에 의해 구분되는 것이다. 또 다른 방법 하나는, 메시지의 길이를 포함하는 헤더를 메시지의 앞에 붙이는 것이다. 수신 애플리케이션은 메시지를 두 부분으로 읽는다. 우선 고정길이 메시지 헤더를 읽고, 헤더에서 가변길이 부분의 길이를 알아낸 후, 가변길이 부분을 읽는다.

 

 

TCP의 성능을 과소평가하지 말라#

항상 UDP가 TCP보다 성능이 좋은 것은 아니다. 애플리케이션이 짧은 요청/응답 세션을 요구할 경우 UDP가 TCP보다 훨씬 좋은 성능을 발휘하며, 연결이 오래 지속되는 경우에는 TCP가 UDP에 비해 더 나은 성능을 가진다.

 

 

TCP를 재수정하는 것을 피하라#

 

 

 

TCP는 신뢰성 있는 프로토콜이지만 결함이 없는 프로토콜은 아니라는 것을 알아야 한다#

 

 

 

TCP/IP는 연결 닫기 정보를 통보하지 않는다는 점을 기억하라#

 

 

 

상대측에서 발생할 수 있는 의외의 행동에 대비하라#

 

 

 

성공적인 LAN 전략이 WAN에도 적용될 것이라고 생각하지 말라#

 

 

 

프로토콜이 어떻게 동작하는지를 배워라#

 

 

 

OSI 7 계층을 너무 심각하게 받아들이지 말라#

 

 

 

TCP의 쓰기 작업을 이해하라#

 

 

 

올바른 순서의 TCP 릴리스 작업을 이해하라#

 

 

 

inetd가 애플리케이션을 시작하게 하는 것을 생각해 보라#

 

 

 

tcpmux가 서버이 잘 알려진 포트를 "할당"하도록 하는 것에 대해 고려하라#

 

 

 

두 개의 TCP 연결 사용을 고려하라#

 

 

 

이벤트 드리븐 기능을 가진 애플리케이션의 제작을 고려하라(1)#

 

 

 

이벤트 드리븐 기능을 가진 애플리케이션의 제작을 고려하라(2)#

 

 

 

연결을 닫기 위해 TIME-WAIT 정보 사용을 폐기하지 말라#

 

 

 

서버는 SO_REUSEADDR 옵션을 설정해야 한다#

 

 

 

가능하면 조금씩 여러 번 보내지 말고 한번에 많이 보내라#

 

 

 

connect 호출을 타임아웃하는 방법을 이해하라#

 

 

 

데이터의 복사를 피하라#

 

 

 

사용 전에 sockaddr_in 구조를 0으로 설정하라#

 

 

 

바이트 저장 순서에 관한 것을 잊지 말라#

 

 

 

애플리케이션 내에 고정 IP 주소와 포트 번호를 사용하지 말라#

 

 

 

connected UDP 소켓을 이해하라#

 

 

 

TCP/IP 프로그래밍에 C가 전부가 아니라는 것을 기억하라#

 

 

 

버퍼 크기의 효율성을 이해하라#

 

 

 

ping 유틸리티와 친숙해져라#

 

 

 

tcpdump나 유사한 도구의 사용법을 배워라#

 

 

 

traceroute의 사용법을 배워라#

 

 

 

ttcp 사용법을 배워라#

 

 

 

lsof 사용법을 배워라#

 

 

 

netstat 사용법을 배워라#

 

 

 

시스템 호출 추적 도구의 사용법을 배워라#

 

 

 

ICMP 메시지를 캡처하기 위한 도구를 제작하고 사용하라#

 

 

 

Stevens를 읽어라#

 

 

 

코드를 읽어라#