본문 바로가기

TCP IP16

7.소켓의 우아한 연결종료 #.TCP 기반의 Half-close TCP에서는 연결과정보다 중요한 것이 종료과정이다. 연결과정에서는 큰 변수가 발생하지 않지만 종료 과정에서는 예상치 못한 일이 발생할 수 있기 때문이다. #.일방적인 연결종료 문제 리눅스의 close 함수호출과 윈도우의 closesocket 함수호출은 완전종료를 의미한다. 완전종료라는 것은 데이터를 전송하는 것과 수신하는 것조차 불가능한 상황을 의미한다. 때문에 한쪽에서의 일방적인 close 또는 closesocket 함수호출은 경우에 따라서 효율적이지 못하다.  호스트A가 마지막 데이터를 전송하고 나서 close 함수의 호출을 통해서 연결을 종료하였다. 때문에 이후부터 호스트A는 호스트B가 전송하는 데이터를 수신하지 못한다. 결국엔 호스트B가 전송한, 호스트A가 .. 2020. 8. 11.
6.UDP 기반 서버/클라이언트 #.udp 소켓 특징 1.장점 - tcp 보다 간결한 구조로 설계되어서 상황에 따라 좋은 성능을 발휘 한다.(seq와 같이 패킷에 번호부여하는일 없음) - 프로그램 관점에서 구현이 용이하다. - 데이터 손실이 자주 발생하지는 않는다. - 신뢰성 보다 성능이 중시되는 상황에서 좋은 선택이 될 수 있다. 2.단점 - 상대방의 수신여부를 알 수 없다. - 전송도중에 데이터가 분실될 수 있다. - 신뢰할 수 없는 전송방법을 제공한다. - 데이터를 전송할 때마다 반드시 목적지의 주소 정보를 별도로 추가해야한다. (tcp 처럼 연결된 상태가 아니기 때문에.) tcp는 신뢰성 없는 ip를 기반으로 신뢰성 있는 데이터 송수신을 위해서 흐름제어를 하지만, udp는 흐름제어가 존재하지 않는다. 흐름제어 존재 유무가 tcp.. 2020. 8. 11.
5.TCP 기반 서버 클라이언트 - 2 # 앞전 포스팅에서 작성한 에코 클라이언트만 문제가 있다면? - echo_server.c while((str_len=read(clnt_sock,message,BUF_SIZE))!=0) // 클라이언트로부터 수신한 문자열이 있을때에 write(clnt_sock,message,str_len); // 그 문자열을 그대로 에코(문자열 끝 널문자는 제외!) - echo_client.c write(sock,message,strlen(message)); // 서버로 문자열(널문자 포함) 전송 str_len=read(sock,message,BUF_SIZE-1); // 서버에서 에코한 문자열 수신 #.참고 0) TCP 소켓은 "데이터의 경계가 없다. 1) 클라이언트가 서버로 문자열을 write 함수 한번을 호출하여 전달.. 2020. 8. 11.
4.TCP 기반 서버 클라이언트 #.TCP/IP 프로토콜 스택 #.LINK 계층 이 계층은 물리적인 영역의 표준화에 대한 결과이다. 이는 가장 기본이 되는 영역으로 LAN, WAN 과 같은 네트워크 표준과 관련된 프로토콜을 정의 하는 영역이다. #.IP계층 목적지로 데이터를 전송하기 위해서 중간에 어떤 경로를 거쳐갈 것인가? 이문제를 해결하는 것이 IP 계층이고, 이 계층에서 사용하는 프로토콜이 IP 이다. IP 자체는 비 연결지향적이며 신뢰할 수 없는 프로토콜이다. 즉, 오류발생에 대한 대비가 되어 있지 않은 프로토콜이 IP이다. #.TCP/IP 계층 데이터의 전송을 위한 경로의 검색을 IP 계층에서 해결해주니, 그 경로를 기준으로 데이터를 전송만 하면 된다. TCP와 UDP계층은 이렇듯 IP 계층에서 알려준 경로 정보를 바탕으로 데.. 2020. 8. 5.
3.주소체계와 데이터 정렬 #.ip 와 port ip는 인터넷 프로토콜의 약자로 인터넷 상에서 데이터를 송수신할 목적으로 컴퓨터에게 부여하는 값이다. 반면 port 번호는 컴퓨터에게 부여하는 값이 아닌, 프로그램상에서 생성되는 소켓을 구분하기 위해 소켓에 부여되는 번호를 뜻한다. #.인터넷 주소의 종류 ip 주소는 IPv4 와 IPv6로 나뉜다. 둘의 차이점은 IP 주소 표현에 사용되는 바이트 크기에 있다. IPv4는 4바이트(32비트) 주소체계이고, IPv6는 16바이트(128비트) 주소체계이다. IPv4 기준의 4바이트 IP 주소는 네트워크 주소와 호스트(컴퓨터) 주소로 나뉘며, 주소의 형태에 따라서 A,B,C,D,E 클래스로 분류가 된다. "IP 주소 = 네트워크 주소 + 호스트 주소" 네트워크 주소란 네트워크의 구분을 위한.. 2020. 8. 5.
2.소켓의 타입과 프로토콜의 설정 #.프로토콜이란 무엇인가? 프로토콜은 컴퓨터간에 통신(대화)을 하기 위해 필요한 통신 규약, 규칙, 약속이다. #프로토콜 체계(protocol Family) #.소켓 함수 int socket(int domain, int type, int protocol); -반환 값 정상(fd >0), 실패(-1) -ERR_NO EAFNOSUPPORT : Address Family를 지원하지 않음. EMFILE : 프로세스에서 더 이상 fd 생성 불가 ENFILE : 시스템에서 더 이상 fd 생성 불가 -매개변수 domain : Address Family ( AF_INET, AF_INET6 ...) type : SOCK_STREAM(TCP), SOCK_DGRAM(UDP) protocol : IPPROTO_TCP, IPP.. 2020. 8. 4.
1.네트워크 프로그래밍과 소켓의 이해 #.네트워크 프로그래밍이란? 네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고 받을 수 있도록 하는 것이 네트워크 프로그래밍이다. #.그렇다면 왜 소켓이라는 표현을 사용하나? 우리는 전력망으로 부터 전기를 공급받기위해서 소켓을 꽂는다. 즉, 가전기기의 소켓은 전력망으로의 연결에 사용된다. 마차가지로 멀리 떨어져 있는 컴퓨터와 데이터를 송수신하려면 인터넷이라는 네트워크 망에 연결해야 한다. 그리고 프로그래밍에서의 소켓은 네트워크 망의 연결에 사용되는 도구다. #.전화기 비유 전화를 걸려면 전화기가 있어야하듯, 컴퓨터끼리 통신을 하려면 소켓(전화기)가 필요하다.(socket 함수로 생성) 전화기에 전화번호가 할당되는것 처럼, 소켓에도 소켓의 주소정보(ipv4, tcp, ip 주소, 포트 등..).. 2020. 8. 3.