TCP 서버, 클라이언트의 함수호출 순서 및 관계 # 전체적인 TCP서버, 클라이언트의 함수 호출 순서 및 관계 흐름도 listen([소켓], [접속가능 최대 수]) - 첫번쨰 인자로 들어가는 소켓은 연결요청 대기상태에 두고자 하는 소켓을 의미한다. - 이 인자로 전달된 소켓이 서버소켓(리스닝소켓)이 된다. - 두번째 인자로 연결요청 대기 큐의 크기정보 즉, 접속가능 최대 수를 의미한다. accept([소켓], [주소정보구조체의 주소], [주소정보구조체 크기를 담는 변수의 주소]) - 연결요청을 수락 - accept된 소켓은 클라이언트와 데이터를 주고받을 수 있는 상태가 된다 따라서 주로 서버측에서는 소켓을 2개 생성한다listen용 소켓 : 서버 문지기 역할accept될 소켓 : 클라이언트 소켓, 즉 ..
TCP(Transmission Control Protocol) : 데이터 전송과정의 컨트롤 - 연결지향형, 스트림 기반 소켓 TCP/IP 프로토콜 스택 # 총 네개의 계층으로 나뉜다. 즉, 데이터 송수신의 과정을 네개의 영억으로 계층화 하였다.데이터 통신에 사용되는 프로토콜 스택은 7계층으로 세분회 되지만, 프로그래머의 관점에서는 4계층으로 볼 수 있다. LINK 계층 - LAN, WAN, MAN과 같은 네트워크 표준과 관련된 프로토콜을 정의하는 영역 - 물리적인 연결에 대한 표준을 담당 IP 계층 - 목적지로 데이터를 전송하기위해 중간에 어떤 경로를 거칠지에대한 문제를 해결하는 계층 - 이 때 사용하는 프로토콜이 IP(Internet Protocol) - IP자체는 비연결지향적이고 전송경로가 일정하지 ..
sockaddr_in에 주소정보를 저장하려면 선언된 멤버는 32비트 정수형이어야 한다.따라서 32비트 형태로 IP주소를 표현하기위해 사용되는 함수가 inet_addr([변환할 IP주소]) 이다. inet_addr(const char * string) - 문자열로 표현된 IP주소를 32비트 정수형으로 변환해주는 함수 - 변환과정에서 네트워크 바이트 순서로의 변환, 정렬도 동시진행 - 유효하지 못한 IP주소에 대한 오류검출 수행 - 변환된 IP주소정보를 구조체 sockaddr_in의 in_addr변수에 추가로 대입해주어야 함. 마찬가지로 유사한 역할을 하는 함수가 하나 더 있다. inet_aton([변환할 IP주소], [in_addr 구조체 변수의 주소값]) inet_aton(const char * stri..
# 서버측 기초 소켓통신 구조 sockaddr_in : IPv4의 주소정보를 담기위해 정의된 구조체 - sin_family · AF_INET : IPv4 프로토콜에 적용하는 주소체계 · AF_INET6 : IPv6 프로토콜에 적용하는 주소체계 · AF_LOCAL : 로컬통신을 위한 유닉스 프로토콜 주소체계 - sin_port · 16비트 PORT번호를 저장 - sin_addr · 32비트 IP주소정보를 저장 - sin_zero · 구조체 sockaddr_in의 크기를 구조체 sockaddr과 일치시키기 위한 의미 없는 멤버. 단 반드시 0으로 채워야한다. 네트워크 바이트 순서와 인터넷 주소 변환 - CPU가 데이터를 메모리에 저장하는 방식을 '호스트 바이트 순서'라 하는데 여기엔 두가지가 있다. 리틀엔디..